パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

qmailにバッファオーバーフローの脆弱性」記事へのコメント

  • 再起動? (スコア:3, 参考になる)

    qmail-smtpdってSMTPセッションごとにtcpserverなりinetd(げげ)から起動されるから、明示的な再起動はいらないんじゃないかと思うんですが。今生きているSMTPセッションをすぐに落として、という意味なのかしら。

    # いずれにせよ、databytesを設定しないでqmailを運用するなんて俺自身は考えられないけど。

    • Re:再起動? (スコア:4, 参考になる)

      by Anonymous Coward on 2004年01月20日 0時56分 (#476450)
      databytesじゃ意味がない [securepoint.com]らしいです。
      親コメント
      • Re:再起動? (スコア:2, 参考になる)

        by visha (779) on 2004年01月20日 9時34分 (#476699) 日記

        本当だ。オリジナルのアドバイザリ [guninski.com]もdatabytesの記述が消えて、

        Workaround: Not tested, but setting quota on the receiving email may help.

        となっています。

        親コメント
        • Re:再起動? (スコア:2, 参考になる)

          by mikiT (17519) on 2004年01月20日 11時22分 (#476828) ホームページ 日記
          quota の設定じゃ逃げられないと思うけどなぁ。
          どのユーザにつけるのかわからないけど。

          qmail-smtpd は受け取るだけで、ローカルユーザの権限のファイルになるのは、qmail-local が Maildir なり Mailbox に書き込む時だから。
          親コメント
          • Re:再起動? (スコア:2, 参考になる)

            by visha (779) on 2004年01月20日 12時09分 (#476904) 日記

            ちょっとqmail-smtpd.cを眺めてみました。

            databytesが設定されていない状況であれば、qmailqにそれなりのquotaをかけてあれば、qmail-smtpdがSIGSEGVを食らう前に(qmail-queueがキューに書き出せなくなって落ちるため)SIGPIPEを食らって落ちてくれると思いますが、databytesを設定してあると無駄ということになりそうです。ちなみに、softlimitをかけてもこの件の解決にはなりません。件のコードはポインタをインクリメントしてるだけで、アロケートはしていませんので。

            結局、blast()内でposがオーバーフローしないようにチェックしてやる以外に方法はないと思いました。

            # そもそも、ヘッダフィールド長の上限(CRLF込みで1000bytes)をチェックしなくていいのかよとも思いますし。

            親コメント
            • by visha (779) on 2004年01月20日 12時19分 (#476918) 日記
              ヘッダフィールド長の上限(CRLF込みで1000bytes)をチェックしなくていいのかよとも思いますし。

              ヘッダに限らないや。RFC2822での1行の長さの制限でした。改めて読んでみると、受け入れちゃいけないわけじゃないみたいですね。

              親コメント
            • by Anonymous Coward
              >結局、blast()内でposがオーバーフローしないようにチェックしてやる以外に方法はないと思いました。

              それは、a) の方ですね。
              int pos; を unsigned int pos; に変えるだけで良さげに思えます。

              b) の方は分からないです。
              smtpのヘッダを分離している部分で起こっているらしいんですが。
      • Re:再起動? (スコア:1, 参考になる)

        by Anonymous Coward on 2004年01月20日 13時05分 (#476999)
        qmail-smtpd.cとqmail.cを読むと分かるが、現在読み込んでいる
        データの量がdatabytesを超えた場合、エラーフラグを設定して
        読み込みの作業を続ける。そしてデータを全て読み込み終わった
        後でdatabytesを超えた旨のフラグが立っていたらクライアントに
        エラーを通知するようになっている。だからdatabytesを設定しても
        読み込み処理のバグは回避できない。

        その他有用そうなもの:
        qmail bug patch [securepoint.com]
        未テストのパッチ(人柱の人は試して結果を報告だ)
        Guninski may have been misled by gdb [securepoint.com]
        バッファーオーバーフローが発生した様に見えるのはgdbの
        問題であって今回の穴はただのSEGVかもしれないという説。
        親コメント
        • by visha (779) on 2004年01月20日 15時14分 (#477145) 日記

          前者のパッチ相当の修正で試してみました。databytesを100MBに設定した環境ですが、a)、b)いずれのパターンも最後まで読み込んで「552 sorry, that message size exceeds my databytes limit (#5.3.4)」で弾いてくれますね。よさそうです。

          親コメント
      • というわけで、

        >ただし対策はさほど難しくなく、/var/qmail/control/databytesに2G以下の数値を設定してこのプロセスを再起動すればよいそうです。

        この部分は訂正してもらった方がいいような。
        親コメント

あと、僕は馬鹿なことをするのは嫌いですよ (わざとやるとき以外は)。-- Larry Wall

処理中...