パスワードを忘れた? アカウント作成
15326334 story
iOS

iPhoneで接続するとWi-Fi機能が無効になってしまうSSID名のバグ 61

ストーリー by nagazou
面倒なバグだ 部門より
minet 曰く、

iPhoneで特定文字列のSSIDのWifiアクセスポイントに接続すると、Wifi機能が無効になってしまう不具合が発見された。(CNET JapanBleepingComputer発見者によるツイート

報告によると、iPhoneで「%p%s%s%s%s%n」というSSIDのアクセスポイントに接続したところ、Wifi機能が無効になり、さらにWifi機能を有効化できなくなってしまったそうだ。
この状態になってしまった場合、修正するにはネットワーク設定をリセットする必要がある。端末再起動では改善しない。
複数のiOSバージョン・端末で再現する模様。

過去の関連記事
auのW42CAとW42Hが%nと%Sの文字列で強制再起動
(他にも類似事例はありそうだがタレコミ人はこれをまず思い出した)

情報元へのリンク

iPhoneから「%p%s%s%s%s%n」という特定名称のSSIDを使用しているWi-Fiに接続した場合、iPhoneのWiFi機能が完全に無効化され、WiFi接続を確立できなくなることが判明した。セキュリティ研究者のCarl Schou氏が発見したもので、この問題が発生するとiPhoneを再起動してもSSIDを変更しても回復しないという。同氏のツイートでは再現時の状況が動画で公開されている。同氏のテスト環境ではiOS 14.4.2やiOS 14.6でも同様の症状が再現された模様。人気WiFiホットスポットの近くで先のSSID名を用いた不正なWiFiホットスポットを設置されるといったリスクが指摘されている(Carl Schou氏TwitterBleepingComputerAppleInsiderEngadget)。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • printf? (スコア:5, 参考になる)

    by Anonymous Coward on 2021年06月23日 10時03分 (#4056227)

    printf(SSID)かsprintf(buffer, SSID)をやってると飛びそうな文字列だけど…。

    まず知ってないとマズい話として、ユーザが入力した何が入ってるか分からん文字列を表示したい、という場合に、

    printf(ユーザが入力した文字列とか);

    は絶対にやっちゃダメな書き方なんだけど。

    printf("%s", ユーザが入力した文字列とか);

    とかputs()を使う必要あり。

    %pはポインタのアドレスを表示なので引数が16進で表示される。
    %sはポインタが指す先を文字列として表示
    %nはそこまでに出力した文字数をポインタが指す先に格納

    なので、もしその書き方をしてしまったというセキュリティホールなら、フォーマット文字列以降に引数は付いてないだろうから、その瞬間にスタックに積んであるデータが対象になってしまう。

    %pは要らないデータを読み飛ばしてる? %sはスタックに積んであるポインタの先を文字列と見なして処理される。\0がなかなか出てこないとえらいことになる。%nはスタックに積んであるポインタの先に数値が書き込まれるのでスタックが壊れる。最悪。

    OSの保護が無ければ任意コード実行も狙えるバグになる。

    • by Anonymous Coward

      良く解説したえらいなぁ
      しかし%nはホントクソ
      printfが古すぎるのや

      • by Anonymous Coward

        C++ で行儀悪いの分かっててもストリームじゃなくて printf 使っちゃうんですよね(ただのロートルなだけですが)
        ただ今時業務系だとロケール切替えのために引数の順序を指定できないと困るので、printf はデバッグトレース時ぐらいしか使わないかなー
        # そしてそのデバッグコードが本番に混ざるまでがお約束

        • by taka2 (14791) on 2021年06月23日 16時32分 (#4056512) ホームページ 日記

          > 引数の順序を指定できないと困る

          標準ではありませんが、今時だとたいがいPOSIXの引数順指定 [wikipedia.org]が使えると思いますよ。

          const char* fmt = "Invalid command %1$s at line %2$d.\n";
          const char* cmd = "hoge";
          const int lineNumber = 20;
          printf(fmt, cmd, lineNumber);
          とした場合、
          Invalid command hoge at line 20.
          と表示される。

          親コメント
        • by Anonymous Coward
          C++のストリームはただの演算子オーバーロードの例であってあれを実際に使う方がよっぽど行儀悪いと思うよw
      • by Anonymous Coward

        文字数なら戻り値があるのに、%nってどう使うんだろな。

        • by Anonymous Coward on 2021年06月23日 12時28分 (#4056346)

          全部じゃなくて、%nの位置までに出力した文字数ってとこに意味があるんやで。

          空白区切り可変長のカラムヘッダを出力して、
          次の行にカラム毎の区切り線出したい時とか便利やろ?

          親コメント
      • by Anonymous Coward

        マイクロソフトのドキュメントだと、セキュリティー的にあかんので%nはデフォルトでは無効になってるそうですが、
        まだ少数派なのかな。

  • SSIDのバグ? (スコア:2, 興味深い)

    by Anonymous Coward on 2021年06月23日 8時37分 (#4056156)

    「SSID名のバグ」ではなく、特定SSID名で起こる「iPhoneのバグ」では?

    • ・「iPhoneで接続するとWi-Fi機能が無効になってしまう」SSID名のバグ
      ではなく
      ・iPhoneで「接続するとWi-Fi機能が無効になってしまうSSID名」のバグ
      と読むんじゃなかろうか。

      親コメント
    • by Anonymous Coward on 2021年06月23日 8時42分 (#4056161)

      「Unicodeは犯罪」みたいな。あれも特定のUnicode文字で起こる「iPhoneのバグ」だよな

      親コメント
      • by Anonymous Coward

        にしても、よく見つけたね、こんな文字列

        • by Anonymous Coward

          沢山人が居れば引っかかる人もいるだろうよ。

    • by Anonymous Coward

      iPhoneやiOSに欠陥はないので、正しく動作しないケースがあれば、そのケースにバグがある(ケースそのものの存在がバグ)

      的な話じゃないか?知らんけど。

      • by Anonymous Coward on 2021年06月23日 10時42分 (#4056261)

        wikipediaには
        > 規格ではそのような制限はなく、SSIDは1から32オクテットの並びであって、各オクテットの値は任意である。

        とありますので、明らかにiPhoneのバグですね

        親コメント
        • by Anonymous Coward

          それでいうなら、文字コードにない文字を指定したら他の機器はどうするんだろ。

          • by minet (45149) on 2021年06月23日 12時41分 (#4056354) 日記

            例えばNintendo New 3DSなんかだと、UTF-8で非ASCII文字バリバリなSSIDは、Wifi設定画面では文字化けしまくりで表示されたけど、それで接続できないとかゲームで通信失敗とかいうことはなかった。

            親コメント
          • by Anonymous Coward

            選択できない・使えないってだけでよいのでは?
            で、正しく選択すればその時使えればよい。

        • by Anonymous Coward

          任意って、Printableである必要すらないのか。
          それはそれで大胆な仕様だな。

          • by Anonymous Coward

            仕様上は文字列じゃなくオクテット列だということでしょ。
            機器側で気を利かせて文字表示しているってだけで

      • by Anonymous Coward

        SSIDの規約で禁止されていない文字列に対して誤動作したのなら,iPhoneやiOSの欠陥ですね.明らかに.

        それが,許されない文字列だったらそのようなSSIDをつけることを許した Wifiルータの問題ともいえるかもしれませんが.

    • by Anonymous Coward

      まあ、iPhone が SSID名の取り扱いについてバグっているとき、
      そのバグを「iPhone の SSID 名のバグ」と言えて、
      iPhone のバグであることが文脈上わかるとき、
      それを「SSID 名のバグ」と言えるだろうとは思う。

    • by Anonymous Coward

      iPhoneのバグと考えるべきなのかなあ。

      %を徒に含むSSIDなんて、使いづらいだけでしょ。
      口頭で伝える必要が出て来ても、伝えにくい。
      こういうのを「美しくない」と形容すると一般化できるんだけど
      「美しくないSSID」を使えるSSIDの規格側のバグとも解釈したいお気持ちなんだが。

      • by Anonymous Coward on 2021年06月23日 18時21分 (#4056584)

        規格がクソなのではないか? は一考の余地があるかもしれない
        しかしこれが仮にバグ(本来ありうべき姿)であったとしても、
        現在規格がありそれに対応してると言いながら動かないiPhoneのバグなのは間違いないでしょ
        バグってのは正義とか悪とかじゃ無いただの現象なんだから、
        「おかしいのはあっちが悪いせいだからこっちは悪くない!」っていうものではない

        親コメント
      • by Anonymous Coward on 2021年06月23日 21時00分 (#4056656)

        SSIDの規格がバグっていると主張しようが、SSID名を設定するのは非iPhoneの外部機器。
        外部からの入力を無条件に信頼してはならないし、美しいSSIDとやらに準拠していることを期待するのも間違い。

        セキュリティホールを作りこんで正常動作を維持できないのだから、バグと言って差し支えない。

        親コメント
  • by Anonymous Coward on 2021年06月23日 11時07分 (#4056280)

    特定文字列を入力すると死ぬアプリというと、Microsoft Mailの「end」問題を思い出す。
    本文に「end」と書かれた行があると処理終了する、だったかな。
    埋め込み uuencode を自動でデコードしてくれる親切設計が、実装がポンコツだったという。
    確か20世紀の話で、当時 fj でシグニチャにわざわざ「end」って入れてた人がいたはず。

    • by Anonymous Coward

      endoさんはどうなる?

    • by Anonymous Coward

      "Microsoft mail uuencode end問題" あたりでググったけれどあまりヒットしない。
      sradの過去記事 [srad.jp]が一件ヒットしたけど、これも曖昧。
      fj のアーカイブとかあさったら出てくるかな。

  • by Anonymous Coward on 2021年06月23日 8時10分 (#4056143)

    なんでだソレ?

    以前も特定の文字列でクラッシュとかあったけど、どんな実装したらそんな奇妙な挙動になるんだ?

    • by Anonymous Coward

      どうして元記事を全部読んでから書き込めないの?

      • by Anonymous Coward on 2021年06月23日 8時58分 (#4056173)

        元記事読む限りでは予想通りの C-format した結果らしいですが、
        何故 SSID を書式化しているのかがわからんのですよね
        ログ回りで C-format を処理しているのかな(で引数が足りなくなってスタック破壊引き起こしてるとか)

        親コメント
      • by Anonymous Coward

        ライブラリが腐ってるだけだよねー

        • by Anonymous Coward

          SSIDの解釈はやらかしがちだとしても
          >iPhoneを再起動してもSSIDを変更しても回復しない
          これはAppleが馬鹿

          • by Anonymous Coward

            なぜ再起動しているのに復帰しないのだろう?実はiOSの再起動は本当の再起動ではないのだろうか?

    • by Anonymous Coward

      NFD問題やらかしてるくらいだから「そんな文字列使うほうが悪い」なんでしょ

  • by Anonymous Coward on 2021年06月23日 9時00分 (#4056174)

    なんか急に画面右上のwifiアイコンが消えて、設定画面でもトグルスイッチが無効になってたりなってなかったり。
    しばらく待ってるとVPNアイコンが出てからwifiが繋がる。

    • by Anonymous Coward

      新しいiphoneを購入する素敵なチャンス

typodupeerror

ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家

読み込み中...