Python CVE-2023-24329 動作メモ

前提

脆弱性診断を行う上でのスキルアップとして検証を行っております。この記事で知り得たことを悪用することは禁止とします

脆弱性概要

3.11.4 より前の Python の urllib.parse コンポーネントの問題により、攻撃者は空白文字で始まる URL を指定することでブロックリスト メソッドを回避できます。

https://nvd.nist.gov/vuln/detail/CVE-2023-24329

検証コード参考

この記事最後の方にあるコードを参考にしました。

https://pointernull.com/security/python-url-parse-problem.html

動作検証

コード

import urllib.request
from urllib.parse import urlparse

def safeURLOpener(inputLink):
    print("★START:" + inputLink)
    block_schemes = ["file", "gopher", "expect", "php", "dict", "ftp", "glob", "data"]
    block_host = ["instagram.com", "youtube.com", "tiktok.com"]
    
    input_scheme = urlparse(inputLink).scheme
    input_hostname = urlparse(inputLink).hostname
    print("●input_scheme:" + str(input_scheme))
    print("●input_hostname:" + str(input_hostname))
    
    if input_scheme in block_schemes:
        print("input scheme is forbidden:" + inputLink)
        return
    if input_hostname in block_host:
        print("input hostname is forbidden:" + inputLink)
        return
    
    print("★ALL OK!!!!:"  + inputLink)
    
def main():
    safeURLOpener("https://youtube.com")
    safeURLOpener(" https://youtube.com")
    safeURLOpener("file://127.0.0.1/etc/passwd")
    safeURLOpener(" file://127.0.0.1/etc/passwd")
    
if __name__ == "__main__":
    main()

動かしてみる。

まずはpythonのバージョンを確認する。

脆弱性が存在するバージョンであることを確認できた。

検証コードを動かす。

頭に空白があるとどうなるかと思ったら、「urlparse」で何も取得できていなかった。

詳細解説は参考記事の方に合った。

ToDo:修正版での動作確認