
脆弱性 CVE 2024 3273 の分析: D-Link デバイスのコマンドインジェクション
D-Link Network Attached Storage(NAS)、すなわちネットワークストレージデバイスは、ファイルの保存と共有のためにコンピュータネットワークに接続するハードドライブ(または複数のドライブ)を備えたデバイスです。コンピュータに直接接続される通常の外付けハードドライブとは異なり、ネットワークストレージデバイスはローカルネットワークに接続し、複数のユーザーやデバイスが同時にファイルを利用・共有できるようにします。ネットワークストレージデバイスは家庭用と業務用の両方で使用されています。
セキュリティ調査を実施する企業 VulDB Coordination は、一部のD-Linkネットワークストレージデバイスに重大なセキュリティ脆弱性(CVE-2024-3273)を発見しました。この脆弱性により、悪意のあるユーザーがネットワーク越しにコマンドインジェクションを行い、被害者のデバイス上で悪意のあるプログラムコマンドを実行できます。
この脆弱性は、すでにサポート期間が終了し、メーカーがソフトウェアおよびハードウェアのサポートを終了した特定のD-Linkデバイスのみに影響します。影響を受けるモデルは以下のとおりです:
この脆弱性は、もう1つの脆弱性が同時に悪用されることも前提としています。具体的には、ハードコードされたログイン認証情報によって引き起こされるバックドアが、ネットワークストレージデバイスを特に脆弱にしています。このバックドアは脆弱性(CVE-2024-3272)であり、影響を受けるすべてのデバイスにデフォルトで存在する*"システムユーザー"*messagebusを使用して、ユーザーが認証をバイパスできます。
このLinuxシステムでデフォルトのシステムデーモン(system daemon)ユーザーでは、直接システムにログインすることはできませんが、特定のエンドポイントへの巧妙に細工されたHTTPリクエストだけで、すでに被害を与えることができます。
また、攻撃対象のデバイスのIPアドレスを知っている必要があります。
この脆弱性は、ネットワークストレージデバイスの/cgi-bin/nas_sharing.cgiファイル内のHTTP GETリクエスト処理関数に存在します。悪意のあるユーザーは、ネットワーク越しに被害者のデバイスへGETリクエストを送信し、パラメータとしてユーザー名"messagebus"を指定し、パスワードを空のままにすることができます。コマンドインジェクションは、systemパラメータを使用し、そのパラメータの値に任意のプログラムコマンドを指定することで発生します。
コマンドはbase64エンコーディングで隠蔽され、systemパラメータの値として追加されます。後でデコードされると、悪意のあるコマンドが露呈し、攻撃対象のデバイス上でシェルコマンドとして実行されます。
🗒️ CVSS ベーススコア: 7.3 高
脆弱性CVE-2024-3273の原因はCWE-77、すなわちコマンドインジェクションです。これは、入力されたコマンドが検証されないため、攻撃者が悪意のあるコマンドを挿入し、攻撃対象のシステムがそれを実行してしまうことを意味します。
デバイスのソースコードは公開されていないため、おそらくこの問題を防ぐには、リクエストを処理するメソッドに検証関数を追加する必要があります。たとえば、任意のコマンドの実行を防ぐために、許可されたシステムコマンドのリストを用意することが考えられます。
この脆弱性は、主に以下のセキュリティ目標を侵害します:
この脆弱性は、すでにサポート期間が終了したデバイスのみに影響するため、メーカーはデバイスを交換し、脆弱なデバイスを使用しないことを推奨しています。
これらのデバイスはもうサポートされていないため、ソフトウェアのセキュリティアップデートも受けられず、脆弱性は修正されません。したがって、唯一の解決策は、脆弱性のある製品の使用をやめることです。
脆弱なデバイスを交換できない場合は、必ずデバイスを公開ネットワークから切り離し、やむを得ない場合にのみローカルネットワーク内のデバイスのみで使用する必要があります(外部からのリクエストをブロックするためにファイアウォールを設置すべきです)。
初期報告によると、脆弱性が発見された時点でネットワーク上には92,000台以上のデバイスがありました。その後の調査によると、この数値は大幅に少なく、5,500台程度だった可能性があります。それでもなお、現在でも多くの古いデバイスがネットワークに接続されたままであり、脆弱な状態である可能性が高いです。
攻撃の概念実証(PoC)が多数公開されており、この脆弱性は現在も広く悪用されている可能性が高いです。現時点までに、CVE-2024-3273の脆弱性を悪用しようとした事例が少なくとも146件確認されています。
サンプルコードの一部:
def execute_command(ip, command: str = "id", verbose: bool = True) -> str:
command_hex = ''.join(f'\\\\x{ord(c):02x}' for c in command)
command_final = f"echo -e {command_hex}|sh".replace(' ', '\t')
base64_cmd: str = base64.b64encode(command_final.encode()).decode()
url: str = f"{ip}/cgi-bin/nas_sharing.cgi"
params: dict = {
"user": "messagebus",
"passwd": "",
"cmd": "15",
"system": base64_cmd,
}