
Inyección SQLi en OpenSIS
Inyección SQL autenticada en OpenSIS
Existe una vulnerabilidad de inyección SQL en Ajax.php, ForWindow.php, ForExport.php, Modules.php, functions/HackingLogFnc.php. Esta falla afecta a OpenSis Community Edition 9.1 a 8.0 y posiblemente a versiones anteriores.
En uno de los ejemplos, Ajax.php, se puede observar que las IPs pueden registrarse e insertarse en la base de datos si se encuentran actividades maliciosas. Un detalle a tener en cuenta es que si se envía el encabezado "X-Forwarded-For", la aplicación tomará ese valor en lugar del valor de $_SERVER['REMOTE_ADDR']. Dado que $ip se concatena directamente en la sentencia SQL sin ningún tipo de sanitización, es posible realizar una inyección SQL.

En la prueba de concepto a continuación, la inyección del payload ' AND SLEEP(7) AND '1'='1 provocó que la aplicación se suspendiera durante 7 segundos, lo que indica que la inyección SQL se realizó con éxito.

Comprobar el registro de la base de datos demuestra aún más esta vulnerabilidad.

Por último, la utilización de SQLMap, una herramienta automatizada de inyección SQL, confirmó la vulnerabilidad.

Se encontró que las líneas de código afectadas concatenan directamente el valor de $_SERVER['HTTP_X_FORWARDED_FOR'] en una sentencia SQL.
• Ajax.php (Línea 260 a 275)
• Modules.php (Línea 1005 a 1023)
• ForExport.php (Línea 135 a 147)
• ForWindow.php (Línea 124 a 136)
• functions/HackingLogFnc.php (Línea 47 a 68)
• En lugar de construir dinámicamente consultas SQL concatenando la entrada del usuario directamente en la sentencia SQL, utilice consultas parametrizadas (también conocidas como sentencias preparadas). Las consultas parametrizadas separan el código SQL de la entrada del usuario, lo que reduce significativamente el riesgo de ataques de inyección SQL.
• Implemente técnicas sólidas de validación y sanitización de entradas para garantizar que los datos proporcionados por el usuario se ajusten a los formatos esperados y no contengan código SQL malicioso. Valide el tipo, la longitud y el formato de los datos de entrada, y sanitice las entradas escapando caracteres especiales o utilizando listas blancas que permitan únicamente caracteres o patrones específicos.
• No utilice $_SERVER[‘HTTP_X_FORWARDED_FOR’] para registrar IPs.