#!/bin/bash
#/**
#         
#@brief    Script para resolver las vulnerabilidades de OpenGnsys CVE-2024-3704, CVE-2024-3705, CVE-2024-3706 y CVE-2024-3707 para las versiones 1.1.1d o anteriores.
# Directorio de los ficheros necesarios para el parche de seguridad
# #@return 
#@exception # 1 Sólo ejecutable por root
#@exception # 2 Falta alguno de los ficheros necesarios para aplicar el parche
#@author  Irina Gomez - ETSII Universidad de Sevilla
#@date    2024-05-20
#*/ ##
PROG="$(basename $0)"
DIRFILES="$(dirname $0)/files"
# Ficheros que modificará el parche de seguridad
FILES="controlpostacceso.php M_Iconos.php iconos_esp.php iconos_eng.php iconos_cat.php opengnsys_update.sh"
# Directorio de backup para los ficheros que modificamos
BACKUPDIR="/root/BACKUP-CVE-2024-370X"
# Raíz de la web de OpenGnsys
OGDIR="/opt/opengnsys"
LIB="$OGDIR/lib"
WWW="$OGDIR/www"


# Control básico de errores.
if [ "$USER" != "root" ]; then
    echo "$PROG: Error: solo ejecutable por root" >&2
    exit 1
fi

# Comprobamos que existan en el subdirectorio los ficheros necesarios para el parche de seguridad
echo "Comprobamos que existan en el subdirectorio los ficheros necesarios para el parche de seguridad."
for FILE in $FILES; do
    echo "    * $FILE"
    if ! [ -r $DIRFILES/$FILE ]; then
	echo "        Fichero $DIRFILE/$FILE no encontrado. No se puede ejecutar el parche de seguridad."
	exit 2
    fi
done
echo ""

# Creamos fichero de backup
echo "Se guardará una copia de los ficheros modificados o borrados en $BACKUPDIR"
[ -d "$BACKUPDIR" ] || mkdir "$BACKUPDIR"
echo ""

# [INC-2023-0127]FormVul_1
# CVE-2024-3707: vulnerabilidad de exposición de información en OpenGnsys que afecta a la versión 1.1.1d (Espeto). 
# Esta vulnerabilidad permite a un atacante enumerar todos los archivos en el árbol web accediendo a un archivo php.
echo "Resolución de CVE-2024-3707: vulnerabilidad de exposición de información en OpenGnsys que afecta a la versión 1.1.1d (Espeto)."
echo "El archivo $WWW/dirphp.php no es necesario."
if [ -f "$WWW/dirphp.php" ]; then
	echo "    mv $WWW/dirphp.php $BACKUPDIR"
	mv "$WWW/dirphp.php" "$BACKUPDIR"
fi
echo ""

# [INC-2023-0127]FormVul_2
# CVE-2024-3706: vulnerabilidad de exposición de información en OpenGnsys que afecta a la versión 1.1.1d (Espeto). 
# Esta vulnerabilidad permite a un atacante ver un archivo de respaldo php (controlacceso.php-LAST) donde se almacenan las credenciales de la base de datos.
echo "Resolución de CVE-2024-3706: vulnerabilidad de exposición de información en OpenGnsys que afecta a la versión 1.1.1d (Espeto)."
cp $OGDIR/lib/opengnsys_update.sh $BACKUPDIR
echo "    cp $DIRFILES/opengnsys_update.sh $OGDIR/lib"
cp "$DIRFILES/opengnsys_update.sh" "$OGDIR/lib"
if [ -f "$WWW/controlpostacceso.php-LAST" ]; then
       echo "Movemos el archivo $WWW/controlpostacceso.php-LAST a $WWW/controlpostacceso-LAST.php"
       echo "    mv $WWW/controlpostacceso.php-LAST $WWW/controlpostacceso-LAST.php"
       mv "$WWW/controlpostacceso.php-LAST" "$WWW/controlpostacceso-LAST.php"
fi
echo ""
 
# CVE-2024-3705: vulnerabilidad de carga de archivos sin restricciones en OpenGnsys que afecta a la versión 1.1.1d (Espeto). 
# Esta vulnerabilidad permite a un atacante enviar una solicitud POST al endpoint '/opengnsys/images/M_Iconos.php' modificando 
# la extensión del archivo, debido a la falta de verificación de la extensión del archivo, lo que resulta en una inyección de webshell.
echo "Resolución de CVE-2024-3705: vulnerabilidad de carga de archivos sin restricciones en OpenGnsys que afecta a la versión 1.1.1d (Espeto)."
cp "$WWW/controlpostacceso.php" "$BACKUPDIR"
echo "    cp "$DIRFILES/controlpostacceso.php" "$WWW/controlpostacceso.php""
cp "$DIRFILES/controlpostacceso.php" "$WWW/controlpostacceso.php"
echo ""

# CVE-2024-3704: vulnerabilidad de inyección SQL en el producto OpenGnsys que afecta a la versión 1.1.1d (Espeto). 
# Esta vulnerabilidad permite a un atacante inyectar código SQL malicioso en la página de inicio de sesión para saltársela 
# o incluso recuperar toda la información almacenada en la base de datos.
echo "Resolución de CVE-2024-3704: vulnerabilidad de inyección SQL en el producto OpenGnsys que afecta a la versión 1.1.1d (Espeto)."
for FILE in images/M_Iconos.php idiomas/php/esp/iconos_esp.php idiomas/php/eng/iconos_eng.php idiomas/php/cat/iconos_cat.php; do
	cp $WWW/$FILE $BACKUPDIR
	echo "    cp $DIRFILES/$(basename $FILE) $WWW/$FILE"
	cp $DIRFILES/$(basename $FILE) $WWW/$FILE
done


