
NitroShare v0.3.4 におけるパストラバーサル脆弱性
NitroShare Desktop v0.3.4 は、LAN ファイル転送サーバーにパストラバーサル脆弱性が存在します。サーバーは認証なしで全ネットワークインターフェース(ポート 40818)で待ち受けます。ファイルを受信する際、送信者の JSON アイテムヘッダーにある name フィールドは、解決されたパスが転送ルートディレクトリ C:\UserName\Downloads\NitroShare 内に留まるかどうかを検証せずに渡されます。同じ LAN 上の攻撃者は、../(古典的なドットドットスラッシュ攻撃)シーケンスを含む細工されたファイル名を送信することで、現在のユーザーがアクセスできる任意の場所にファイルを書き込むことができます。これには、次回ログイン時にコードを実行するための Windows スタートアップフォルダも含まれます(そのため、作成された POC があります)。ユーザーの操作は不要です。さらに、TLS はデフォルトで無効(アプリケーションが提供する認証方法)であるため、デフォルトでは認証が不要です。IT および情報セキュリティの分野で長年働いてきた経験から、ほとんどのユーザーがそのまま(無効の状態で)使用するだろうと私は想定しています。
{"name":"attacker","size":"<n>","count":"1"}。{"name":"../../AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/payload.exe","directory":false,"created":"0","last_modified":"0","last_read":"0","size":"<n>"}
動作する PoC が提供されており(poc_path_traversal_via_lan_transfer___arbitrary_file_w.py)、Windows 上の NitroShare 0.3.4 に対して検証済みです。
/、\)と .. シーケンスを除去または拒否します。QDir::absoluteFilePath() で解決した後、結果が転送ルートディレクトリで始まることを検証してから処理を続行します。