Critical Zlib Vulnerability Let Attackers Trigger Buffer Overflow by Invoking untgz
2026/01/12 CyberSecurityNews — zlib に同梱される untgz ユーティリティのバージョン 1.3.1.2 に発見されたのは、深刻なグローバルバッファ・オーバーフローの脆弱性 CVE-N/A である。攻撃者は、細工したコマンドライン入力を介してメモリを破壊し、悪意あるコードを実行する可能性がある。この欠陥は、untgz ユーティリティの TGZfname() 関数に存在する。この関数は、ユーザーが指定したアーカイブ名を処理する際、入力サイズの検証を行わずに strcpy() を呼び出す実装となっている。その結果、1,024 バイト固定長の静的グローバル・バッファに対して境界を超えるデータコピーが発生し、メモリ破壊が引き起こされる。

技術的な詳細
この脆弱性の根本原因は、不適切な入力処理にある。具体的には、アーカイブ名が “argv[]” パラメータから直接取得され、境界チェックを行わずにグローバル静的配列へコピーされるという問題が生じている。
そのため、この関数の呼び出し直後に、すなわちアーカイブの解析や検証が行われる前にオーバーフローが発生する。そのため、この脆弱性はコマンドライン引数のみを用いて容易に悪用可能である。 セキュリティ研究者の検証によると、1,024 バイトを超えるアーカイブ名を指定することで、バッファ終端を超える範囲外書き込みが発生し、メモリ破損に至ることが実証されている。
| Attribute | Details |
|---|---|
| CVE ID | Not yet assigned |
| Affected Software | zlib untgz utility |
| Affected Version | v1.3.1.2 |
| Vulnerability Type | Global Buffer Overflow |
| CWE | CWE-120 (Buffer Copy without Checking Size of Input) |
| Attack Vector | Command-line input |
| Impact | Denial of Service, Memory Corruption, Potential Code Execution |
この脆弱性による潜在的な影響として挙げられるのは、サービス拒否 (DoS) によるクラッシュ/隣接するグローバル・メモリ・オブジェクトの破損/未定義の動作などである。 また、さらに深刻な点として、コンパイラ設定/システム・アーキテクチャ/ビルド・フラグ/メモリ・レイアウトに応じて、攻撃者によりコード実行に至る可能性がある。
研究者たちによる、AddressSanitizer (ASAN) を用いた具体的な実証実験では、4,096 バイトのファイル名引数を指定して untgz を呼び出すことで、この脆弱性の再現に成功している。 その結果、ASAN の出力から確認されたのは、脆弱なメモリアドレスに対する 2,001 バイトの書き込みと、それに伴うグローバル・バッファ・オーバーフローの発生だった。
特筆すべきは、このオーバーフローがスタック・メモリではなくグローバル・メモリへ影響する点である。これにより、関数スコープを超えた破損が持続され、後続のプログラム動作に影響を及ぼす可能性が生じる。総論として、この脆弱性の悪用は特別な権限を必要とせず、攻撃の複雑さも低い。したがって、影響を受ける zlib の untgz ユーティリティを使用するシステムは、きわめて危険な状況にある。
データの圧縮/展開に広く使われる zlib に同梱された untgz ユーティリティに、深刻なバッファ・オーバーフローの脆弱性が発見されました。この問題の原因は、アーカイブ名を処理する TGZfname() 関数における不適切な入力サイズの検証にあります。具体的には、プログラムがコマンドラインから受け取ったファイル名を、1,024 バイトという固定された長さのメモリ領域 (バッファ) へコピーする際に、その長さが安全かどうかを確認せずに strcpy() 関数を使用するという問題が生じていました。その結果、制限を超える長さのファイル名が入力されると、用意された領域を突き抜けて隣接するメモリを破壊してしまい、プログラムの異常終了や悪意あるコードの実行を許すリスクが生じます。ご利用のチームは、ご注意ください。よろしければ、zlib での検索結果も、ご参照ください。
You must be logged in to post a comment.