
Injeção SQLi no OpenSIS
Injeção SQL autenticada no OpenSIS
Existe uma vulnerabilidade de injeção SQL em Ajax.php, ForWindow.php, ForExport.php, Modules.php, functions/HackingLogFnc.php. Esta falha afeta o OpenSis Community Edition 9.1 a 8.0 e possivelmente versões anteriores.
Em um dos exemplos, Ajax.php, pode-se ver que IPs podem ser registrados e inseridos no banco de dados se atividades maliciosas forem encontradas. Uma coisa a observar é que, se o cabeçalho “X-Forwarded-For” for enviado, a aplicação usará esse valor em vez do valor de $_SERVER['REMOTE_ADDR']. Como $ip é concatenado diretamente na instrução SQL sem qualquer forma de sanitização, é possível realizar Injeção de SQL.

Na prova de conceito abaixo, injetar o payload, ' AND SLEEP(7) AND '1'='1, fez a aplicação dormir por 7 segundos, indicando que a injeção de SQL foi bem-sucedida.

Verificar o log do banco de dados comprova ainda mais essa vulnerabilidade.

Por fim, a utilização do SQLMap, uma ferramenta automatizada de injeção de SQL, confirmou a vulnerabilidade.

As linhas de código afetadas foram identificadas como sendo aquelas que anexam diretamente o valor de $_SERVER['HTTP_X_FORWARDED_FOR'] a uma instrução SQL.
• Ajax.php (Linha 260 a 275)
• Modules.php (Linha 1005 a 1023)
• ForExport.php (Linha 135 a 147)
• ForWindow.php (Linha 124 a 136)
• functions/HackingLogFnc.php (Linha 47 a 68)
• Em vez de construir consultas SQL dinamicamente concatenando a entrada do usuário diretamente na instrução SQL, utilize consultas parametrizadas (também conhecidas como prepared statements). Consultas parametrizadas separam o código SQL da entrada do usuário, reduzindo significativamente o risco de ataques de injeção de SQL.
• Implemente técnicas robustas de validação e sanitização de entrada para garantir que os dados fornecidos pelo usuário estejam em conformidade com os formatos esperados e não contenham código SQL malicioso. Valide os tipos de dados, o comprimento e o formato da entrada, e sanitize as entradas escapando caracteres especiais ou usando listas de permissões para permitir apenas caracteres ou padrões específicos.
• Não use $_SERVER[‘HTTP_X_FORWARDED_FOR’] para registrar IPs.