<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    Python PIL 遠程命令執行漏洞(GhostButt)CVE-2017-8291

    Path python/PIL-CVE-2017-8291

    Python中處理圖片的模塊PIL(Pillow),因為其內部調用了GhostScript而受到GhostButt漏洞(CVE-2017-8291)的影響,造成遠程命令執行漏洞。

    漏洞詳情:

    漏洞簡述

    PIL內部根據圖片頭(Magic Bytes)判斷圖片類型,如果發現是一個eps文件(頭為%!PS),則分發給PIL/EpsImagePlugin.py處理。

    在這個模塊中,PIL調用了系統的gs命令,也就是GhostScript來處理圖片文件:

    command = ["gs",
                "-q",                         # quiet mode
                "-g%dx%d" % size,             # set output geometry (pixels)
                "-r%fx%f" % res,              # set input DPI (dots per inch)
                "-dBATCH",                    # exit after processing
                "-dNOPAUSE",                  # don't pause between pages,
                "-dSAFER",                    # safe mode
                "-sDEVICE=ppmraw",            # ppm driver
                "-sOutputFile=%s" % outfile,  # output file
                "-c", "%d %d translate" % (-bbox[0], -bbox[1]),
                                                # adjust for image origin
                "-f", infile,                 # input file
                ]
    
    # 省略判斷是GhostScript是否安裝的代碼
    try:
        with open(os.devnull, 'w+b') as devnull:
            subprocess.check_call(command, stdin=devnull, stdout=devnull)
        im = Image.open(outfile)

    雖然設置了-dSAFER,也就是安全模式,但因為GhostScript的一個沙盒繞過漏洞(GhostButt CVE-2017-8291),導致這個安全模式被繞過,可以執行任意命令。

    另外,截至目前,GhostScript官方最新版9.21仍然受到這個漏洞影響,所以可以說:只要操作系統上安裝了GhostScript,我們的PIL就存在命令執行漏洞。

    漏洞測試

    運行環境:

    docker-compose build
    docker-compose up -d

    運行后,訪問http://your-ip:8000/即可看到一個上傳頁面。正常功能是我們上傳一個PNG文件,后端調用PIL加載圖片,輸出長寬。但我們可以將可執行命令EPS文件后綴改成PNG進行上傳,因為后端是根據文件頭來判斷圖片類型,所以無視后綴檢查。

    比如poc.png,我們上傳之,即可執行touch /tmp/aaaaa。將POC中的命令改為反彈命令,即可獲得shell:

    本文章首發在 網安wangan.com 網站上。

    上一篇 下一篇
    討論數量: 0
    只看當前版本


    暫無話題~
    亚洲 欧美 自拍 唯美 另类