CPython の脆弱性 CVE-2024-12254 が FIX:asyncio アプリにメモリ枯渇の可能性

CVE-2024-12254: CPython Flaw Could Lead to Memory Exhaustion in asyncio Applications

2024/12/09 SecurityOnline — Python プログラミング言語のリファレンス実装である CPython に、深刻度の高い脆弱性 CVE-2024-12254 (CVSSv4:8.7) が発見された。この脆弱性は、バージョン 3.12.0 以降に影響を及ぼすものであり、asyncio モジュールを用いるアプリケーションにおいてメモリ不足を引き起こす可能性がある。

この脆弱性は、asyncio._SelectorSocketTransport.writelines() メソッドの欠陥に起因する。特定の条件下において、このメソッドは書き込みを “pause” できず、また、バッファ容量が限界に達したときに排出するための、プロトコルを用いた信号の送信ができない。それにより、メモリが無制限に増加し、アプリケーション/システム全体がクラッシュし得る。

この脆弱性には、重大度の高いスコアが割り当てられているが、その一方では、限定的な影響を及ぼすだけとも思われる。また、この脆弱性の対象となる範囲は、macOS/Linux システム上で Python 3.12.0 以降を実行しているアプリのみとなる。さらに言うと、そのアプリのプロトコルで asyncio モジュールが利用され、Python 3.12.0 で導入された新たな zero-copy-on-write ビヘイビアで、 .writelines() メソッドを使用する必要がある。

影響は限定的だが、開発者とシステム管理者に強く推奨されるのは、Python アプリケーションを評価し、脆弱性の有無を判断することだ。前述の条件が満たされている場合には、Python の最新バージョンへと更新することを強く推奨する。

この脆弱性は、Python 3.12.0 での writelines() メソッド・ビヘイビアの変更により発生する。以前のバージョンでは、このメソッドは書き込みに “pause” をかけ、また、特定のしきい値に達した場合には、バッファを空にするための信号を送っていた。しかし、Python 3.12.0 で導入された zero-copy-on-write ビヘイビアにより、この “pause” メカニズムが誤って削除されてしまった。

その結果として、書き込みバッファが無制限に大きくなり、システム・メモリの枯渇に至る恐れが生じていた。それにより、アプリケーション・クラッシュや、サービス拒否、さらには、システムの不安定化につながる可能性が生じている。

すでに Python 開発チームは、最新の Python 3.12 をリリースし、この脆弱性に対処している。このリスクを軽減するために、ユーザーに対して強く推奨されるのは、Python を最新バージョンに更新することだ