
Dos problemas de seguridad identificados en la versión gratuita de Sn1per v9.0 por XeroSecurity
KALI/UBUNTU/DEBIAN/PARROT LINUX INSTALL:
git clone https://github.com/1N3/Sn1per
cd Sn1per
bash install.sh
root@snipertest:~# git clone https://github.com/1N3/Sn1per
Cloning into 'Sn1per'...
remote: Enumerating objects: 2838, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 2838 (delta 5), reused 10 (delta 4), pack-reused 2825
Receiving objects: 100% (2838/2838), 43.18 MiB | 18.76 MiB/s, done.
Resolving deltas: 100% (1950/1950), done.
root@snipertest:~# cd Sn1per/
root@snipertest:~/Sn1per# bash install.sh
____
_________ / _/___ ___ _____
/ ___/ __ \ / // __ \/ _ \/ ___/
(__ ) / / // // /_/ / __/ /
/____/_/ /_/___/ .___/\___/_/
/_/
+ -- --=[ https://xerosecurity.com
+ -- --=[ Sn1per by @xer0dayz
[>] This script will install sn1per under /usr/share/sniper. Are you sure you want to continue? (Hit Ctrl+C to exit)
y
[snip]
'/usr/share/sniper/sniper.conf' -> '/root/.sniper.conf'
Please run msfdb as a non-root user
[*] Adding start menu and desktop shortcuts...
[>] Done!
[>] To run, type 'sniper'!
root@snipertest:~/Sn1per#
Justo después de la instalación, los permisos del directorio de instalación se establecen como:
root@snipertest:~/Sn1per# ls -ld /usr/share/sniper/
❗drwxrwxrwx❗ 10 root root 4096 Aug 16 19:19 /usr/share/sniper/
root@snipertest:~/Sn1per# ls -la /usr/share/sniper/
total 6668
drwxrwxrwx 10 root root 4096 Aug 16 19:19 .
drwxr-xr-x 222 root root 12288 Aug 16 19:41 ..
-rw-r--r-- 1 root root 36518 Aug 16 18:33 CHANGELOG.md
-rw-r--r-- 1 root root 1269 Aug 16 18:33 Dockerfile
-rw-r--r-- 1 root root 306 Aug 16 18:33 LICENSE.md
-rw-r--r-- 1 root root 11697 Aug 16 18:33 README.md
-rw-r--r-- 1 root root 6491364 Aug 16 18:33 Sn1per.gif
-rw-r--r-- 1 root root 159147 Aug 16 18:33 Sn1per.jpg
drwxr-xr-x 2 root root 4096 Aug 16 18:33 bin
drwxr-xr-x 2 root root 4096 Aug 16 19:41 conf
rwxr-xr-x 1 root root 11548 Aug 16 18:33 install.sh
drwxr-xr-x 9 root root 4096 Aug 16 19:42 loot
drwxr-xr-x 2 root root 4096 Aug 16 18:33 modes
drwxr-xr-x 43 root root 4096 Aug 16 19:27 plugins
drwxr-xr-x 2 root root 4096 Aug 16 18:33 pro
-rw-r--r-- 1 root root 276 Aug 16 18:33 sn1per.desktop
-rw-r--r-- 1 root root 4283 Aug 16 18:33 sn1per.png
-rwxr-xr-x 1 root root 28290 Aug 16 18:33 sniper
-rw-r--r-- 1 root root 9752 Aug 16 18:33 sniper.conf
drwxr-xr-x 4 root root 4096 Aug 16 18:33 templates
-rwxr-xr-x 1 root root 980 Aug 16 18:33 uninstall.sh
drwxr-xr-x 2 root root 4096 Aug 16 18:33 wordlists
Aunque todos los archivos pertenecen a root, los permisos del directorio contenedor nos permiten manipular los archivos, por lo que se puede colocar una puerta trasera en uno de los scripts. Otra modificación, probablemente más sigilosa, sería colocar la puerta trasera en el archivo de configuración (sniper.conf), ya que este archivo se carga mediante el comando source de bash.
Como la aplicación debe ser ejecutada por root, lo cual está garantizado por una comprobación de EUID en el script:
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root"
exit 1
fi
colocar una puerta trasera en él hará que se ejecute con root privileges la próxima vez que se utilice la aplicación.
Líneas 37-40 del script de instalación:
mkdir -p $INSTALL_DIR 2> /dev/null
chmod 777 -Rf $INSTALL_DIR 2> /dev/null
chown root $INSTALL_DIR/sniper 2> /dev/null
chmod 4777 $INSTALL_DIR/sniper 2> /dev/null
Different issue than CVE-2021-39274
En la primera ejecución de la aplicación, el script principal del escáner sniper ejecuta la función init que cambia recursivamente los permisos del directorio de instalación y su contenido.
Al igual que con CVE-2021-39274, esto permite modificar todos los archivos de la aplicación, incluidos ejecutables y configuraciones, y colocar en ellos una puerta trasera que se ejecutaría con root privileges la próxima vez que root utilice la aplicación.
Líneas 464-466 del script principal:
chmod 777 -Rf $INSTALL_DIR 2> /dev/null
chown root $INSTALL_DIR/sniper 2> /dev/null
chmod 4777 $INSTALL_DIR/sniper 2> /dev/null