Mac OS X の Safari からYAMAHA NVR500にログインできない件

これはNVR500を買う前に、ちゃんとMacからでも設定できるかしらと考えてGoogleでリサーチしていたときに
Mac OS X 端末からだと、かんたん設定ページにログインができないヤマハもクソに成り下がったとか書いてあるブログを見つけて
なんということだと頭を抱えつつ、設定ができないだけならいいかと注文したら
ちゃんと設定できちゃったという話。

パスワード未設定の場合、Safariだとログインできません。

これが真理。
工場出荷時ではパスワード未設定だったとおもったので、設定が開始できないというオチに見舞われる。


前機種のRT58iではパスワード未設定の場合、パスワード入力画面が表示されずに「かんたん設定ページ」が表示されるのだが
NVR500ではパスワード入力画面が表示される。


FirefoxではここでIDとパスワードに何も入力せずにOKをクリックすれば、何事もなかったかのようにログインができるのだが
Safariではパスワードが間違っていますといった表示が出てログインができない。

なんとかするには

A案
ターミナルでtelnetログインしてadministratorパスワードを設定する。
Safariでログインするときにそのパスワードを入れてログインする。


アプリケーションのユーティリティのターミナルを開く。
10秒ぐらい待つ。遅いとすぐにコマンド入力受付状態にならないかもしれないので。
telnet ルータのIP を入れてEnter (telnet 192.168.100.1 とか)
Password: と出て止まる。そのままEnter
なんかいっぱい出る。
administrator と入れてEnter
Password: と出る。そのままEnter
administrator password と入れてEnter
Old_Password: と出る。そのままEnter
New_Password: と出る。パスワードをいれてEnter。
New_Password: とまた出る。さっきの打ったパスワードをもう一度入れEnter。
save と入れてEnter
なんか文字化けした文字が出るが、たぶんその中にCONFIG0と書いてあるところだけ読めるはず。
書いてあったら成功しているのでそのままターミナルは閉じる。
本当はexitを入れてEnterというのを2度やったほうがいいが
ターミナルアレルギーならばそのまま閉じる。問題ない。


それができないというか、やるつもりがない人がNVR500を買うというのはちょっとレアケースのような気もするけど
なにかのシステムにセットで納品されてきて、使う人は全くの素人という可能性もあるから一概には言えないよね。
NTTのBIZ-BOX-RTなんかはRT58iのOEMみたいだけど、これのNVR500バージョンもそのうちでてきておかしくないだろうし。


B案
Firefoxとかの別のブラウザを使ってログインして、パスワードを設定してからSafariを使って設定する。
FirefoxではOKであることを確認したけど、Operaとかは知らん。


C案
設定にSafariはつかわない。
ただSafari以外ブラウザが入っていない環境からアクセスしようとしたときにちょっとイラつくし
パスワード未設定の状態はあれなので、設定するときにちゃんとパスワードも設定しよう。

なんで?

Wiresharkでパケットを追いかけてみたよ。


結果論としては、まずNVR500にHTTPリクエストを送る→401エラーが帰ってくる。
ここで両ブラウザとも、IDとパスワードを入力しろという画面を表示するのだけど、


FirefoxはID/パスともに入力せずにOKを入力しても、空の(半角コロンをBASE64エンコードしただけの)Authorizationヘッダを送る仕様なんだけど
Safariはこれを送らずにHTTP GETするからNVR500は認証せずにもう一度HTTPリクエストされたとおもって
また401を返されて、そんでSafariはあきらめちゃうみたい。諦めなくてもその仕様じゃ無限ループなのだけど・・・

Firefoxの場合はこう

まずはHTTP GETで/をリクエストする。

NVR500からHTTP/1.0 401 Unauthorizedが帰ってくる。
HTTPレスポンスヘッダにWWW-Authenticateヘッダがついてて、YAMAHA-RT [administrator]と言えばユーザーはわかるから
とにかくパスワード入力画面を表示しろ!
そんでBasic認証で返してこい!と言ってきている。

Firefoxはユーザーにこういう形でパスワード入力画面をだしてくる。
Firefox「おい!リクエストしたけどダメだったぞなんとかしろ」

そんで、ID/PW未入力でEnterすると
HTTPリクエストヘッダにAuthorizationヘッダをつけて、Basic Og==(改行)と返事している。
Og==はBASE64デコードしてみるとわかるけど(その結果はWiresharkでCredentialsと出ていてわかるけど)

:

だ。本当はユーザ名:パスワードをBASE64エンコードしたものがここにくっついているのだけど、今回は何も入力しなかったので
 : だけがBASE64エンコードされて送信されている。

そうすると、HTTP/1.0 200 OKかなにか返してきているのだとおもうけど(Wireshark上では見えないけど
認証成功してかんたん設定ページのHTMLソースをゲットしている。

Safariの場合はこう

まずはHTTP GETで/をリクエストする。


NVR500からHTTP/1.0 401 Unauthorizedが帰ってくる。
HTTPレスポンスヘッダにWWW-Authenticateヘッダがついてて、YAMAHA-RT [administrator]と言えばユーザーはわかるから
とにかくパスワード入力画面を表示しろ!
そんでBasic認証で返してこい!と言ってきている。


Safariはユーザーにこういう形でパスワード入力画面をだしてくる。
Safari「おい!リクエストしたけどダメだったぞなんとかしろ」



そんで、ID/PW未入力でEnterすると、何事もなかったかのように最初と同じようにパスワードなしで/をHTTP GETしようとする。
HTTPリクエストヘッダにAuthorizationヘッダをつけない。


401が帰ってきて無限ループ。かとおもいきや、Safariは401にくっついてきたHTMLコードを表示してそれでおしまい。
401にくっついてきたHTMLコードは、パスワード入力画面でキャンセルしたときに表示されたりするんだけど
このへんはブラウザの挙動によって異なるのかね。

YAMAHA RT58iはadministratorパスワード未設定の場合401エラーを返さない

返さずそのままGo。

最新ファームウェアを導入してもこの仕様ということは、NVR500がパスワード未設定時に
401エラーを返してパスワード入力を求めるような仕様になったのは
脆弱性とかそういうたぐいの問題ではないように思う
YAMAHAさんはそれなりに昔の機種でも脆弱性等発覚の際に新ファームウェアをリリースしてくれる)

YAMAHAさんなんとかしてよ

と思ったけどどこに言えばいいのかよくわかんないし
あり得そうで怖いんだけどSafariの仕様のほうが標準に準拠してないから
どうのこうのとか言われて終了というオチもありそうだから怖くて言えねえ

iOSSafariも同じだった

この仕様はiOSSafariでも同じだった。以上。