← ishizakahiroshi.com
失敗談 2026-07-07

echo password | sudo -S は危ない。認証キャッシュでパスワードがファイルに漏れることがある

sudo -S の落とし穴。パイプに混ぜた秘密がファイルに漏れる

パスワードとファイルの中身を同じ標準入力に混ぜて sudo -S に渡すと、認証キャッシュが効いている時に 1 行目のパスワードが消費されず、公開ファイルにそのまま書き込まれて外部露出することがあります。実際にやってしまった事故から、なぜ起きるのか(sudo -S の挙動と認証キャッシュ)と、一時ファイル + sudo cp で経路を分ける直し方までをまとめました。

Qiita で読む →

この記事のテーマ

静的ファイルが認証なしで配信されること自体は、ブラウザアプリでは普通のことで脆弱性ではありません。今回の事故は「その公開される場所へ、秘密を書き込んでしまった」ことが本質でした。引き金は sudo -S の一行で、認証情報を運ぶ経路とデータを運ぶ経路を 1 本のパイプにまとめたこと。だから対策も「経路を分けるだけ」で足ります。

記事全体の要約。漏洩のメカニズムと経路分離の対策
漏洩が起きるメカニズム(キャッシュ有無の対比)と、経路分離による対策を 1 枚に要約。
sudo -S の標準入力処理。キャッシュ有無で結果が反転する対比図
同じコマンドでも、直前に sudo を使ったか(認証キャッシュの有無)だけで、ファイルに漏れるかどうかが反転する。
NG(混ぜる)と OK(一時ファイル + sudo cp)の経路対比図
認証情報とデータを 1 本の管に混ぜる書き方(NG)と、一時ファイル + sudo cp で経路を分ける書き方(OK)。