C言語のせいで、未認証の攻撃者がrootシェルを取れる脆弱性がまた生まれた

*sshole, or when are we going to get rid of C?

C言語のせいで、未認証の攻撃者がrootシェルを取れる脆弱性がまた生まれた

musl libcのcrypt関数がパスワード長すぎる場合に"*"を返す仕様と、Unixで"*"がロック済みアカウントを意味する慣習が衝突。PAMなしのAlpine AWS公式イメージで、sshdがロック済みアカウントのログイン試行をハッシュ化する際にこの問題が発生し、未認証ユーザーがrootシェルを取得可能に。型システム以前に、Cコミュニティの規範がエラーを帯域内シグナリングで扱うことを許容している点が根本原因だと筆者は指摘する。

C開発者のエンジニアリング規範は"*"をエラーを示す許容可能なセンチネル値として認めているが、Rust開発者の規範はそれを単純に認めない。
  1. PeterWhittaker

    これはCの問題というより、むしろmuslチームの設計判断のミスだ。ひどい慣行(プログラマがcryptの戻り値をチェックしないこと)への対応として、彼らは間違いなくもっとひどいもの(番兵値を返すこと)を実装してしまった。

    確かにRustのstd::resultなら愚かなことをしにくくはできるが、愚かさは常に抜け道を見つけるものだ。

  2. zeroCalories

    Rustのコンパイル時間が本当に嫌いなんだよな

  3. varispeed

    これがCと何の関係があるんだ?ただの設計のまずさだろ。

    自分のジャージのせいで運転が下手だと責めるようなものだ。

この日のほかの記事

2026-11-06