
iPhoneで接続するとWi-Fi機能が無効になってしまうSSID名のバグ 61
面倒なバグだ 部門より
iPhoneで特定文字列のSSIDのWifiアクセスポイントに接続すると、Wifi機能が無効になってしまう不具合が発見された。(CNET Japan、BleepingComputer、発見者によるツイート)
報告によると、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氏Twitter、BleepingComputer、AppleInsider、Engadget)。
printf? (スコア:5, 参考になる)
printf(SSID)かsprintf(buffer, SSID)をやってると飛びそうな文字列だけど…。
まず知ってないとマズい話として、ユーザが入力した何が入ってるか分からん文字列を表示したい、という場合に、
printf(ユーザが入力した文字列とか);
は絶対にやっちゃダメな書き方なんだけど。
printf("%s", ユーザが入力した文字列とか);
とかputs()を使う必要あり。
%pはポインタのアドレスを表示なので引数が16進で表示される。
%sはポインタが指す先を文字列として表示
%nはそこまでに出力した文字数をポインタが指す先に格納
なので、もしその書き方をしてしまったというセキュリティホールなら、フォーマット文字列以降に引数は付いてないだろうから、その瞬間にスタックに積んであるデータが対象になってしまう。
%pは要らないデータを読み飛ばしてる? %sはスタックに積んであるポインタの先を文字列と見なして処理される。\0がなかなか出てこないとえらいことになる。%nはスタックに積んであるポインタの先に数値が書き込まれるのでスタックが壊れる。最悪。
OSの保護が無ければ任意コード実行も狙えるバグになる。
Re: (スコア:0)
良く解説したえらいなぁ
しかし%nはホントクソ
printfが古すぎるのや
Re: (スコア:0)
C++ で行儀悪いの分かっててもストリームじゃなくて printf 使っちゃうんですよね(ただのロートルなだけですが)
ただ今時業務系だとロケール切替えのために引数の順序を指定できないと困るので、printf はデバッグトレース時ぐらいしか使わないかなー
# そしてそのデバッグコードが本番に混ざるまでがお約束
Re:printf? (スコア:1)
> 引数の順序を指定できないと困る
標準ではありませんが、今時だとたいがいPOSIXの引数順指定 [wikipedia.org]が使えると思いますよ。
Re: (スコア:0)
Re: (スコア:0)
ログは全部あれで出してるな
printfよりはましやと思うぞ
Re:printf? (スコア:1)
そこは、boost::format [github.io] の出番じゃないですかね。
といった感じ。
% 演算子のオーバーロードによるパラメータ指定はboostの変態っぷりを象徴してそうですが
Re:printf? (スコア:1)
Re:printf? (スコア:1)
おお、C++20での新機能 [github.io]なんですね。
順番指定が0オリジンなあたりにこだわりを感じる…
Re:printf? (スコア:1)
プログラミング初心者を想定ユーザとしていないから、では?
もっとも、それら機能は非初心者が生むバグの原因にもなっている。
避けがたい理由が無ければ、CもC++も使うべきではない、と言う事じゃないかな。
初心者に限らず。
Re: (スコア:0)
文字数なら戻り値があるのに、%nってどう使うんだろな。
Re:printf? (スコア:1)
全部じゃなくて、%nの位置までに出力した文字数ってとこに意味があるんやで。
空白区切り可変長のカラムヘッダを出力して、
次の行にカラム毎の区切り線出したい時とか便利やろ?
Re: (スコア:0)
マイクロソフトのドキュメントだと、セキュリティー的にあかんので%nはデフォルトでは無効になってるそうですが、
まだ少数派なのかな。
Re: (スコア:0)
いや解説する気なんかなかった(皆知ってるやろうと思って)ので悔しくなんかない
当たり前のことをわざわざ書けるってのはすごいよ
SSIDのバグ? (スコア:2, 興味深い)
「SSID名のバグ」ではなく、特定SSID名で起こる「iPhoneのバグ」では?
頑張って解釈すると (スコア:2)
・「iPhoneで接続するとWi-Fi機能が無効になってしまう」SSID名のバグ
ではなく
・iPhoneで「接続するとWi-Fi機能が無効になってしまうSSID名」のバグ
と読むんじゃなかろうか。
Re:SSIDのバグ? (スコア:1)
「Unicodeは犯罪」みたいな。あれも特定のUnicode文字で起こる「iPhoneのバグ」だよな
Re: (スコア:0)
にしても、よく見つけたね、こんな文字列
Re: (スコア:0)
沢山人が居れば引っかかる人もいるだろうよ。
Re: (スコア:0)
iPhoneやiOSに欠陥はないので、正しく動作しないケースがあれば、そのケースにバグがある(ケースそのものの存在がバグ)
的な話じゃないか?知らんけど。
Re:SSIDのバグ? (スコア:1)
wikipediaには
> 規格ではそのような制限はなく、SSIDは1から32オクテットの並びであって、各オクテットの値は任意である。
とありますので、明らかにiPhoneのバグですね
Re: (スコア:0)
それでいうなら、文字コードにない文字を指定したら他の機器はどうするんだろ。
Re:SSIDのバグ? (スコア:2)
例えばNintendo New 3DSなんかだと、UTF-8で非ASCII文字バリバリなSSIDは、Wifi設定画面では文字化けしまくりで表示されたけど、それで接続できないとかゲームで通信失敗とかいうことはなかった。
Re: (スコア:0)
選択できない・使えないってだけでよいのでは?
で、正しく選択すればその時使えればよい。
Re: (スコア:0)
任意って、Printableである必要すらないのか。
それはそれで大胆な仕様だな。
Re: (スコア:0)
仕様上は文字列じゃなくオクテット列だということでしょ。
機器側で気を利かせて文字表示しているってだけで
Re: (スコア:0)
SSIDの規約で禁止されていない文字列に対して誤動作したのなら,iPhoneやiOSの欠陥ですね.明らかに.
それが,許されない文字列だったらそのようなSSIDをつけることを許した Wifiルータの問題ともいえるかもしれませんが.
Re: (スコア:0)
まあ、iPhone が SSID名の取り扱いについてバグっているとき、
そのバグを「iPhone の SSID 名のバグ」と言えて、
iPhone のバグであることが文脈上わかるとき、
それを「SSID 名のバグ」と言えるだろうとは思う。
Re: (スコア:0)
iPhoneのバグと考えるべきなのかなあ。
%を徒に含むSSIDなんて、使いづらいだけでしょ。
口頭で伝える必要が出て来ても、伝えにくい。
こういうのを「美しくない」と形容すると一般化できるんだけど
「美しくないSSID」を使えるSSIDの規格側のバグとも解釈したいお気持ちなんだが。
Re:SSIDのバグ? (スコア:1)
規格がクソなのではないか? は一考の余地があるかもしれない
しかしこれが仮にバグ(本来ありうべき姿)であったとしても、
現在規格がありそれに対応してると言いながら動かないiPhoneのバグなのは間違いないでしょ
バグってのは正義とか悪とかじゃ無いただの現象なんだから、
「おかしいのはあっちが悪いせいだからこっちは悪くない!」っていうものではない
Re:SSIDのバグ? (スコア:1)
SSIDの規格がバグっていると主張しようが、SSID名を設定するのは非iPhoneの外部機器。
外部からの入力を無条件に信頼してはならないし、美しいSSIDとやらに準拠していることを期待するのも間違い。
セキュリティホールを作りこんで正常動作を維持できないのだから、バグと言って差し支えない。
歴史は繰り返す (スコア:1)
特定文字列を入力すると死ぬアプリというと、Microsoft Mailの「end」問題を思い出す。
本文に「end」と書かれた行があると処理終了する、だったかな。
埋め込み uuencode を自動でデコードしてくれる親切設計が、実装がポンコツだったという。
確か20世紀の話で、当時 fj でシグニチャにわざわざ「end」って入れてた人がいたはず。
Re: (スコア:0)
endoさんはどうなる?
Re:歴史は繰り返す (スコア:1)
Re: (スコア:0)
「end」だけ書かれた行、だった。
endo さんも kendo さんも trend さんも大丈夫。
「^end$」と書くべきだったか。
Re: (スコア:0)
"Microsoft mail uuencode end問題" あたりでググったけれどあまりヒットしない。
sradの過去記事 [srad.jp]が一件ヒットしたけど、これも曖昧。
fj のアーカイブとかあさったら出てくるかな。
iOSに限らずappleのOSは特定の文字列で誤動作する (スコア:0)
なんでだソレ?
以前も特定の文字列でクラッシュとかあったけど、どんな実装したらそんな奇妙な挙動になるんだ?
Re: (スコア:0)
どうして元記事を全部読んでから書き込めないの?
Re:iOSに限らずappleのOSは特定の文字列で誤動作する (スコア:1)
元記事読む限りでは予想通りの C-format した結果らしいですが、
何故 SSID を書式化しているのかがわからんのですよね
ログ回りで C-format を処理しているのかな(で引数が足りなくなってスタック破壊引き起こしてるとか)
Re: (スコア:0)
ライブラリが腐ってるだけだよねー
Re: (スコア:0)
SSIDの解釈はやらかしがちだとしても
>iPhoneを再起動してもSSIDを変更しても回復しない
これはAppleが馬鹿
Re: (スコア:0)
なぜ再起動しているのに復帰しないのだろう?実はiOSの再起動は本当の再起動ではないのだろうか?
Re: (スコア:0)
NFD問題やらかしてるくらいだから「そんな文字列使うほうが悪い」なんでしょ
そんなのに繋がなくても無効になる (スコア:0)
なんか急に画面右上のwifiアイコンが消えて、設定画面でもトグルスイッチが無効になってたりなってなかったり。
しばらく待ってるとVPNアイコンが出てからwifiが繋がる。
Re: (スコア:0)
新しいiphoneを購入する素敵なチャンス
Re: (スコア:0)
残念、iPhone12。
Re: (スコア:0)
?コメント誤爆してませんか?
Re: (スコア:0)
いやぁ彼は信じてるんじゃないかな…
プログラムとか言う概念はないんだと思う
Re: (スコア:0)
「中国をけなすと自分の格が上がる」と信じている人が一定数いるのでしょう.
そういった人の科学技術に関する知識や論理能力の平均的レベルは低めに見えます.
Re: (スコア:0)
え?
聖林檎楽園学園?
#ゴーン