iPhone の Wi-Fi を無効化する SSID のバグ、影響範囲が広がる 63
ほかにも出てきそう 部門より
iPhone で SSID「%p%s%s%s%s%n」の Wi-Fi アクセスポイントに接続すると Wi-Fi 機能が無効化されるというバグが先日報告されたが、影響のある SSID はこの文字列に限定されないようだ(Mashable の記事)。
最初にバグを報告した Carl Schou (@vm_call) 氏は4日、SSID「%secretclub%power」のWi-FiアクセスポイントをホストすればすべてのiOSデバイスのWi-Fiを完全に無効化できると報告。最初のバグではネットワーク設定をリセットすれば回復していたが、こちらには効果がないという。
一方、このバグをAlex Skalozub (@pieceofsummer) 氏とともに調査していた Saif Eldeen Aziz (@wr3nchsr) 氏によると、フォーマット指定文字列に関する脆弱性であり、SSID に「%s」が含まれていれば特定の文字列である必要はないそうだ。Aziz 氏はネットワーク設定をリセットしても復旧しない理由として「%s」を含む SSID が複数保存されていることが原因となっている可能性を指摘する。問題のあるネットワークの SSID が保存された状態で wifid を開始しようとすると NULL ポインタデリファレンスが引き起こされ、wifid がクラッシュするとのこと。
Aziz 氏と Skalozub 氏が考案した修復方法は2種類。その一つは端末の初期化で、もう一つは iPhone のバックアップをいったん作成し、バックアップの既知のネットワークリストファイル (com.apple.wifi.known-networks.plist) から問題のエントリーを削除してから復元する方法だ。Schou 氏は後者の方法で修復できたという。Skalozub 氏は修復を実行する Python スクリプトを GitHub で公開している。
なお、Schou 氏の説明では悪意あるアクセスポイントのサービスエリア内に入るだけでWi-Fiが機能しなくなるようにも読めるが、Aziz 氏によれば悪意あるアクセスポイントを選択して接続しない限り問題は発生しないとのことだ。
解せない標準関数たち (スコア:2)
素のprintfはともかく、その子分が長い歴史でchar[] string = sprintf(format, (in_str1, in_str2)); とかPython風の記法にならなかったのが謎。何故に副作用を持つのだ。
Re: (スコア:0)
Cではメモリの所有権の問題で難しいだろう。
Javaは最初printfなしで頑張ってたが、結局要望が多かったんだろう、後から入れた(String.formatやSystem.out.printf)が、勿論Stringを返す形になってる。
C++のSTLではprintfはない。ただ、現在ではboostにあり(boost::format)、std::stringを返す。
SSIDの件は副作用でなく、可変個のパラメタの問題と考えられるので、あんまり関係ないが。
Re: (スコア:0)
上記の例だと関数がメモリ割り当ても行う必要ある?
便利感とやりすぎでは感がある
Re:解せない標準関数たち (スコア:2)
え? 戻すStringのためのバッファはsprintf()のオブジェクトインスタンs……
# 今更気づいたらしい
Re: (スコア:0)
strdup() [linuxjm.osdn.jp]
Re:解せない標準関数たち (スコア:2)
strdupは標準Cライブラリの関数じゃなかったような
Re: (スコア:0)
なるほど。
C言語の中の人のことを正直わかってないのだが、ヘッダファイルで言うと
sprintf - stdio.h
malloc - stdlib.h
strdup - string.h
らしい。こことかで何かあるのだろうか。stdioはstdlibは使いたくないがstringは気にしないとか
Re: (スコア:0)
std**.h は Standard *** の略で昔からある基本機能、これを使うことに躊躇う理由は何もない
とはいっても string.h を使うのを躊躇う理由も何もないけど、strdup は使わないかなぁ
C 言語を使う理由の1つに「メモリ管理を隠蔽しない」というのがある
関わる人全員が「strdup 内で malloc されていて、その戻り値は自分で free しないといけない」と分かっていれば良いけど、その前提は厳しい
malloc したものは free する(あるいは相当するプロジェクト独自関数を使う)、とコーディングルールに定めておくと見通しが良くなります
# なお私は自分で管理したくないので C++ 使います
Re: (スコア:0)
どもども。
stdlib.h、適当に検索したらUNIX v7にstdlibはありませんか?とかいうStackoverflowの翻訳ぽい記事があって、89年ごろは
環境によってあったりなかったりしたぽい。stdlib.hが無くてもmallocはあると思うけど。
stdio.hは検索とかしてないけど、stdlib以前に成立してるなら、そのAPI設計は後年stdlibになる関数の依存を薄くすることは
ありえると思う。sprintfが今の形になったのがそのためかはわからない
Re: (スコア:0)
ヘッダの成立はともかく、printf にしろ malloc にしろ K&R(ごく初期) の時点で存在する関数です
sprintf が今の引数になっているのは、メモリをプログラマが管理する、という前提を守ったからではないでしょうか
この引数だと書き込む先の領域がスタックでもヒープでもいいので、環境依存も減らせます
# ヒープのないマイコンでも動かすために必要だし、と思ったけどそんな環境に sprintf なんて高機能な関数載ってないか……
Re: (スコア:0)
こんにちは。
K&RC 2版が手元に残ってたんで(初版1989、手持ちは2000頃の版)見てみたけど、strdupも記載があるのはあるね。
書きっぷりからユーザー定義関数ぽくて、サンプルプログラムとしてたまたまの登場か、当時の環境でも
事実上の標準として存在したのかはちょっとわからないけど。
Re:解せない標準関数たち (スコア:1)
Arduinoにはsprintfありますね。
Arduinoのプログラムって、uint8_t で十分なところにlongとか下手するとfloatを平気で使ったりして、
8bitCPUに何させるの、と、貧乏性の自分には心臓に悪いコードが多いですけど、
ヒープは一応あるけど容量厳しいので、動的メモリ確保(malloc や new)してるコードはほとんど見かけない。
C++ベースだけどオブジェクトはグローバル変数として静的に定義するのが基本。
悪意とは (スコア:1)
SSIDに「%s」が含まれるアクセスポイントを「悪意あるアクセスポイント」と呼ぶのは違和感がある。
この話が明らかになってから新たに設定したのなら悪意の存在は明確だけど、知らずにバグを突いてしまった善意の第三者を「悪意ある」というのは言い過ぎでしょ。
Re:悪意とは (スコア:1)
規格上問題はないわけだから、おかしな実装をしたAppleの方こそ悪意があるのではないか。
https://apple.srad.jp/comments.pl?sid=814769&cid=4056261 [apple.srad.jp]
wikipediaには
> 規格ではそのような制限はなく、SSIDは1から32オクテットの並びであって、各オクテットの値は任意である。
Re:悪意とは (スコア:1)
規格上問題はないわけだから、おかしな実装をしたAppleの方こそ悪意があるのではないか。
「科学者は100%安全だと保証できないものは動かしてはならない」、科学者「えっ」、プログラマ「えっ」
Re: (スコア:0)
今回はAppleの落ち度だが、
例えばメールアドレスを厳密にRFCチェックすると途方もない処理になる
実現できてるソフトはほぼ無いんじゃないかな
Re:悪意とは (スコア:1)
「落ち度」って言うより、純粋なバグだと思うよ。
それも、かなり恥ずかしいレベルの。
みたいな明らかにまずいことを、どこかでやっているだけ。
Re: (スコア:0)
RFCに完璧に準拠してるわけじゃないという点は通じるものが有るけど、
ばれないバグはバグじゃないという観点から見ると大きな差が有るな。
落ち度として見えてしまったことが悪い。
Re: (スコア:0)
別に完璧な処理を書けというわけではなくて、踏んだときに発生する影響範囲が問題なわけですよ
メールアドレスも弾くだけなら影響範囲は狭いですけど、今回だとサーバ自体が通信不能になるみたいな話で、それだったら大きな問題になるでしょ
今回のも該当 SSID に接続できないぐらいだったら大きな問題にはならなかったけど、その後も引きずる大きな影響があったわけで
何が言いたいって、例外処理は大事
Re: (スコア:0)
ぎゃあー!パーセント!エンガチョ!
Re: (スコア:0)
この元ネタってパヨク活動家の発言だったのを初めて知ったわ
https://web.archive.org/web/20150414231624/https://www.asahi.com/artic... [archive.org]
https://ja.wikipedia.org/wiki/%E6%95%91%E6%8F%B4%E9%8 [wikipedia.org]
Re:悪意とは (スコア:1)
そのうち「ユニコードは犯罪」みたいなノリで「パーセントは犯罪」と言われそう…
Re:悪意とは (スコア:1)
Appleなら言う。間違いなく。言わないならそれはもうAppleではない。
Re: (スコア:0)
上位互換に見せかけて微妙に違う「iuNi code」とか生み出そう
Re: (スコア:0, 荒らし)
Appleに被害を与えてるんだ。
この一点を持って悪意と認定して何がおかしいというのか。
Re: (スコア:0)
Apple「に」被害を与えてる??
Re: (スコア:0)
他人の庭の鍵で勝手に自爆しているだけに見えるが。
Re: (スコア:0)
ちゃんと「悪意ビット」を実装しておかないからこんなことになる。
「悪意ビット」がONのアクセスポイントを「悪意あるアクセスポイント」と呼ぶなら何の問題もない。
#悪意あるアクセスポイントがやり取りするパケットは悪意ビットを立てられるし
Re: (スコア:0)
知らずに「free_wifi_100%secure」みたいな名前を付けてしまう可能性がありますもんね
Re: (スコア:0)
なんでAP運用者がiPhone運用してる前提なの?
Re: (スコア:0)
iPhone選ぶ人って、周りと違うのが嫌とか、いちいち設定しなきゃいけないのが嫌、とか
むしろ自分でAP運用したりしない人だと思うが違うのか。
Re: (スコア:0)
いや普通に持ってないが、iPhoneの所有とネットワークの仕事に何の関係があるの?
Re:悪意とは (スコア:1)
#4066315は、iPhone持ってギガが減るとか言ってるJKたちがいずれAP運用してSSID設定するような技術者になるから
IT人材不足なんて怖くないと言ってるんだよ
Re:悪意とは (スコア:1)
バギーで問題を起こすことが多いので、検証用に持っている場合も多いとかかな。
自分で使いたくはないな。
Re: (スコア:0)
ごめん。多分日本語を書いてるんだと思うんだけど、意味がまったくわからない。
どこか別次元の御方?
Re: (スコア:0)
iPhone使っている様な人は、メーカーお仕着せの簡単接続で使うような人だろ?
影響範囲が広がるってか (スコア:0)
エスケープ漏れでやらかしてるんだから該当文字入っていればアウト
今回は「恐らくそう」→「そうであることが確認できた」ってことと
「復旧に使えるpyつくったった」て話かと
# タイトルがいくない
無線LAN親機で予防? (スコア:0)
NURO光が公開しているD-OUNの取扱説明書で、SSID名の説明が変更されていました。
https://www.nuro.jp/pdf/device/manual_HG8045Q.pdf#page=58 [www.nuro.jp]
発行 06、日付 2020-12-07
タブ文字無しで、最大32文字から構成されます。
発行 07、日付 2021-06-28
表示可能なASCIIコードで構成されます。タブや特殊文字($,"\&|;`)は使用できません。
Re:無線LAN親機で予防? (スコア:2)
Re: (スコア:0)
https://support.huawei.com/enterprise/en/access-network/echolife-hg804... [huawei.com]
EOS: 2021-12-31 (Subject to EOX bulletins)
これ12月で終わりなのね
バグ (スコア:0)
はバグだと思うけど、SSIDをそんなトリッキーな文字列に設定にする必要あるのかな?と。
Re:バグ (スコア:1)
Re: (スコア:0)
奥手な人の列???
草食系の人の列だろうか?
Re: (スコア:0)
早くバイトいけよ
Re: (スコア:0)
まぁ、SSIDがオクテット列という事も、そも、オクテット列が何かも分かってない、非アレゲなわけだけど。(面倒だろうから説明はいいよ)
そんな複雑なのにする意味が、って事。長さも文字種も局所で識別するのにじゅうぶんだと思うんだけどね。
Re: (スコア:0)
規格としては人が見ることを条件とはしてないから、人が読めない文字だの画面で区別されな・表示されない文字だの使っていようと問題ない、という話やね
でもそれはあくまで規格の話であって、現代では人が見て使い分けるためにあるようなものだから設定者はせめて見て区別できるような文字列設定しろよ、というのは全くもって正論
(そもそもは人が読むことを要求してないから、コードとして01, 02, 03, ...って割り振ってもいいんだけど、それを人用のプログラムに通すとバグるんだ、という言い方の方が良いか?)
Re: (スコア:0)
制限しない方が規格としてはシンプル、実装は複雑ってところですね
ただ(意図してはないと思いますが結果として)SSID に日本語とか使えるのは、この規格のお陰だと思いますよ
# 日本語 SSID なんて使う気もないし繋ぎたくもないけど
Re: (スコア:0)
知らない人に気軽に繋がれないよう胡散臭いSSIDにしてます
Re: (スコア:0)
知らんけど、大量のAPをまとめて設定するスクリプト書いて、
"%s"と間違えて'%s'って書いちゃったんじゃないかな。
Re: (スコア:0)
RFC違反のメールアドレスを見た目が面白いからと使ってた人はガラケー時代には結構いた
というか今でも結構いるらしく、メールアドレスを使うサービスでRFC準拠のバリデーションが切るに切れないからこまるってマックで女子高生が言ってた
#ACじゃなきゃ書けない