DNS Library “c-ares” の深刻な脆弱性 CVE-2025-31498 が FIX:use-after-free の可能性

Critical Vulnerability (CVE-2025-31498) Patched in c-ares DNS Library

2025/04/11 SecurityOnline — DNS (Domain Name System) は、人間が理解しやすいドメイン名を、コンピュータが理解できる数値の IP アドレスに変換するという、重要な役割を果たすものである。そして、この変換を促進する多くのアプリケーションコア核には、堅牢な非同期 DNS リゾルバ・ライブラリである c-ares が存在している。しかし、この最も信頼性の高いツールでさえ、潜在的な脆弱性を抱えている可能性があることを、先日に公開された CVE-2025-31498 が示している。

DNS クエリをブロックすることなく処理し、複数のクエリを並列処理する能力も高いと評価されている c -ares だが、read_answers() 関数に、深刻な解放後メモリ使用 (use-after-free) の脆弱性が存在することが判明した。この脆弱性 CVE-2025-31498 (CVSSv4:8.3) は、DNS Cookie 障害/上流サーバの EDNS 非互換性に加えて、突然の接続切断を伴う TCP クエリなどのシナリオにおいて、大きなリスクをもたらすという。

c -ares の公式セキュリティ・アドバイザリには、「DNS Cookie の失敗/上流サーバでの EDNS の不適切なサポートに加えて、レスポンス直後に接続を閉じたリモートのケースなどで、process_answer() がクエリを再度キューに入れる可能性がある場合には、read_answers() で after free() を使用してほしい」と記されている。

通信プロセスの不具合により、DNS クエリが再度キューに入れられるシナリオを想像してほしい。この再度キューに入れられたトランザクションの送信中に、問題が発生した場合に、接続ハンドルが途中で閉じられる可能性がある。しかし、それを認識しない read_answers() は、ハンドルがアクティブであると想定し続ける。この矛盾は、攻撃者に好機を与えてしまう。

このアドバイザリは、「新しいトランザクションを送信する際に問題が発生した場合に、その接続ハンドルは閉じられるが、read_answers() は他のレスポンスをキューから取り出すために、接続ハンドルが使用可能であると想定し続ける」と警告している。

このアドバイザリは、この脆弱性をリモートから攻撃することは、理論上において可能だと認めている。ただし、そのためには、上流のネームサーバを制御しながら、標的に ICMP UNREACHABLE パケットを大量に送りつけるといった、かなり複雑な攻撃シナリオが必要になる。その一方で、ローカルの攻撃者にとっては、システムの動作を操作してsend()/write() の失敗を引き起こすという、より単純な攻撃方法がある。

この脆弱性が影響を及ぼす範囲は、c-ares のバージョン 1.32.3〜1.34.4 となる。幸いなことに、すでに c-ares チームは、必要なパッチを取り込んだバージョン 1.34.5 を迅速にリリースしている。ユーザーに対して強く推奨されるのは、最新バージョンへの、速やかなアップデートである。

影響を受けるバージョンを利用するユーザーは、以下の重要なパッチ・リンクを確認してほしい。

c-ares は多くのアプリケーションやシステムで利用されているため、その脆弱性は広範な影響を及ぼす可能性があるとのことです。重要なライブラリのようであり、システム全体のセキュリティに大きな影響を与えると指摘されています。c-ares を利用している開発者の方々は、十分にご注意ください。よろしければ、OpenSource + Library で検索も、ご参照下さい。