Go 環境の脆弱性 CVE-2024-24787/24788 が FIX:任意のコード実行にいたる可能性

CVE-2024-24787 (CVSS 9.8): Go Vulnerability Could Lead to Code Execution

2024/05/08 SecurityOnline — シンプルで効率的なソフトウェア開発を実現する Go プログラミング言語で、最近になって発見された2つの深刻な脆弱性に対処する、セキュリティ・アドバイザリが発表された。Go 環境で確認されたのは、DNS 操作における任意のコード実行 CVE-2024-24787 と、無限ループ CVE-2024-24788 の脆弱性である。

CVE-2024-24787 (CVSS:9.8): Darwin でのビルドにおける任意のコード実行

この脆弱性は、Darwin オペレーティング・システムに特有のものであり、CGO を取り込んだ Go モジュールのビルド・プロセスで、不注意に任意のコード実行を許してしまう可能性を持つ。この欠陥は、Apple 版のリンカー (ld) を使用する際の “#cgo LDFLAGS” ディレクティブの “-lto_library”フラグの誤用に起因する。

従来においては、このフラグを使用して、Darwin リンカーは LTO ライブラリの設定を許可していたが、ライブラリのリンクに使用される無害な “-lx” フラグとの類似性の問題がある。したがって、以前の Go における “安全なリンカー・フラグ” 検証では、チェックされていなかった方法となる。この脆弱性の悪用に成功した 攻撃者は、悪意の LTO ライブラリを読み込み、”go build” コマンドによるビルド プロセス中に、任意のコードを実行する可能性を持つ。

CVE-2024-24788 (cvss 7.5):不正な DNS メッセージによる無限ループ

この脆弱性は、Go の DNS ルックアップ関数内に存在し、Go コードに依存するアプリケーションやサーバを、不正な DNS レスポンスでクラッシュさせる可能性を持つ。細工されたレスポンスにより無限ループが引き起こされ、サービス拒否 (DoS) シナリオにつながる可能性がある。

アプリケーションおよびサービスのクラッシュや、リソースへのアクセス拒否の可能性は、アップタイムが重要な Web システムにおいて極めて重大な脅威となる。

Go 1.22.3/1.21.10 へのアップデート

Darwin システムで Go を使用している開発プロジェクトまたは、Go の DNS ルックアップ機能を使用しているプロジェクトでは、バージョン 1.22.3/1.21.10 へのアップデートを優先する必要がある。これらのバージョンには、上記の攻撃ベクターをシャットダウンするための修正分が含まれている。