← ishizakahiroshi.com
設計判断 2026-07-31

隣の Windows 11 の音を、机の別 PC のブラウザから切り替える。Rust で作って公開しました

物理 Windows 11 のホストに Hyper-V ゲストのウィンドウが重なり、ホスト側にスピーカーとヘッドフォンが繋がっているヒーロー画像

Hyper-V ゲストの中で開発していると、ホスト側の音声出力デバイスを切り替えるためだけにホストのデスクトップまで戻る必要があります。 それが面倒で作った audioremote を、6 日かけて設計を詰めて npm / crates.io / GitHub Releases の 3 経路に公開するまでの記録です。 リリース直前の監査で「任意の Web ページを開いただけでホストの出力先を切り替えられる」CSRF が見つかった話も入っています。

Zenn で読む →

この記事のテーマ

「音を鳴らす場所」と「操作する場所」が離れている構成でだけ困る問題を、どこまで狭く定義して作るかという話です。 LAN 公開を既定にするか、ホスト自身にもトークンを要求するか、MS Store に出す価値があるか。壁打ちで判断が何度も反転した過程をそのまま残しました。

後半はリリース当日の記録です。監査で出た 18 件のうち一番効いたのは、loopback なら安全だと思っていた前提が崩れた 1 件でした。 body を持たない POST は preflight が発生せず、IP リテラルを使えば DNS も要らないため、ホストのブラウザで悪意あるページを開くだけで出力先を切り替えられる状態でした。

audioremote の全体像を 1 枚にまとめたインフォグラフィック