Hyper-V ゲストの中で開発していると、ホスト側の音声出力デバイスを切り替えるためだけにホストのデスクトップまで戻る必要があります。 それが面倒で作った audioremote を、6 日かけて設計を詰めて npm / crates.io / GitHub Releases の 3 経路に公開するまでの記録です。 リリース直前の監査で「任意の Web ページを開いただけでホストの出力先を切り替えられる」CSRF が見つかった話も入っています。
「音を鳴らす場所」と「操作する場所」が離れている構成でだけ困る問題を、どこまで狭く定義して作るかという話です。 LAN 公開を既定にするか、ホスト自身にもトークンを要求するか、MS Store に出す価値があるか。壁打ちで判断が何度も反転した過程をそのまま残しました。
後半はリリース当日の記録です。監査で出た 18 件のうち一番効いたのは、loopback なら安全だと思っていた前提が崩れた 1 件でした。 body を持たない POST は preflight が発生せず、IP リテラルを使えば DNS も要らないため、ホストのブラウザで悪意あるページを開くだけで出力先を切り替えられる状態でした。