yusuk****@cheru*****
yusuk****@cheru*****
2004年 2月 16日 (月) 21:44:08 JST
田畑です。 > > についてですが、どうも Mac OS X の fstat(2) は socket に対して st_uid > などが使えないというバグがあるようです。man page には、 <略> > のみ使える情報が存在していました… 困ったものです。ということで、descriptor に対してではなく、socket のパスそのものの > st_uid を確認するほうが、ポータブルなのかもしれません。 自分および他の開発者へのメモ的に突っ込んでおきます。 #Katoさんを批判する気はまったくありませんので、御理解をお願いします。 fdを作ってからpathのパーミッションをチェックする。もしくは それを逆の順序で行うことはセキュリティホールです。 原理的にはこの二つの操作の間に悪意のあるユーザが別のサーバを 仕込むことによって盗聴が可能になります。 実際には (1)こんなセキュリティーホールを突くのは極めて難しい (2)現時点では大した情報が取れるわけではない #今、カナモードかどうかとかが取れる なので、どうでも良いんですけど、大阪育ちとしては、 セキュリティーの初歩的な教科書的にあるようなボケを堂々と カマすのは止めておきたいと思います。 pathが/tmp/uimhelper-usernameであることなどを まじめに考えれば、安全性を保ったままでもう少し条件を 緩和することができると思うのですがバグのために コードを複雑化するのは避けたいです。 「2004年ごろのMacOS X」対策ですとコメントを書いた上で、 if (fst.st_uid != getuid()) { if (何か敗者復活条件) { } else { close(fd); return -1; } } みたいに他のOSでのフローが変わらないようなコードが できれば、取り込みたいと思います。 #owner以外は読めないはずなのにconnectできてるとか #他のOSなら有り得ない状況?このチェックにraceはあり? 重大なセキュリティホールで無い上に、普通のUnix的な環境では 入力システムの情報漏洩は伝統的に無視することになっているのですが、 MacOS Xでやってしまうのはどうかなと思います。 #なんか間違ってたら教えてください。 > セキュリティに詳しい人 #IRCか直メールでもOKです。 -- CHAOS AND CHANCE! Yusuke TABATA (yusuk****@cheru*****)