
CVE-2024-28397 の PoC と修正: Python オブジェクト参照操作による RCE を可能にする js2py のサンドボックスエスケープ。再現手順と動的パッチを含みます。
js2py は、Python インタプリタ内で JavaScript コードを評価できる人気の Python パッケージです。さまざまな Web スクレイパーが Web サイト上の JavaScript コードを解析するために使用しています。
js2py のグローバル変数の実装には脆弱性があり、攻撃者が js2py 環境内の Python オブジェクトへの参照を取得できるため、攻撃者は js 環境を抜けてホスト上で任意のコマンドを実行できる可能性があります。
通常、ユーザーは js2py.disable_pyimport() を呼び出して JavaScript コードが js2py 環境から抜け出すのを防ぎます。しかし、この脆弱性により、攻撃者はこの制限を回避してホスト上で任意のコマンドを実行できます。
脅威行為者は、悪意のある js ファイルを含む Web サイトをホストしたり、HTTP API を介して悪意のあるスクリプトを送信し、被害者に解読させることができます。これにより、行為者はターゲット上で任意のシェルコマンドを実行し、ホスト上でリモートコード実行を行うことができます。
js2py は Python 3.12 をサポートしていません)pip install js2py を実行して js2py をインストールし、poc.py を実行する (poc.py はホスト上で head -n 1 /etc/passwd; calc; gnome-calculator; kcalc; を実行しようとします)Success! the vulnerability exists... を出力するか、電卓がポップアップ表示されます。現在、公式の修正は利用できません。ユーザーは fix.py を使用して動的に js2py にパッチを適用するか、patch.txt を使用してソースコードを修正できます。
私は 2 月にこの脆弱性を発見し、公式リポジトリに PR を提出しました。しかしその後、PR は忘れられ、4 か月が経過したため、今 PoC と修正を公開することにしました。