前提
※脆弱性診断を行う上でのスキルアップとして検証を行っております。この記事で知り得たことを悪用することは禁止とします
脆弱性概要
3.11.4 より前の Python の urllib.parse コンポーネントの問題により、攻撃者は空白文字で始まる URL を指定することでブロックリスト メソッドを回避できます。
https://nvd.nist.gov/vuln/detail/CVE-2023-24329
検証コード参考
この記事最後の方にあるコードを参考にしました。
Python URL Parse Problem (CVE-2023-24329) – PointerNull
動作検証
コード
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:修正版での動作確認
コメント