これは Postfix の脆弱性について述べられた文書 http://archives.neohapsis.com/archives/postfix/2003-08/0189.html を訳したものです。 ---------------------------------------------------------------------- このパッチは、Postfix の smtpd, qmgr そして trivial-rewrite サービスを 使用する他のプログラムの、DoS 条件を修正する。問題は、不正なアドレスを 不完全な結果に解決する時に誘発される。これは、影響されるプログラムが結 果を拒否し、無限に trivial-rewrite 要求のリトライの原因となる。 問題は Michal Zalewski によって Postfix バージョン 1.11 内に発見され、 SMTP コマンド中のアドレスまたは Errors-To メッセージヘッダ経由でリモー トから誘発される。脆弱な Postfix バージョンは、後述の1行パッチの適用 または回避策の設定の適用によって、修正される。 脆弱な Postfix バージョンでは、SMTP コマンド内の不正なアドレスは、 Postfix 内蔵のアクセス制御機能がそれをブロックする前に影響する。この特 別なアドレス構文は Postfix バージョンと Postfix の設定内容に依存する。 Postfix バージョンを調べるには、"postconf mail_version" コマンドを使用 する。1.1 より前のバージョンは、バージョン番号の代わりに日付を示す (例: Postfix-20010228-pl08)。バージョン 1.1 以降はバージョン番号に追加して 日付を示す場合がある (例: 2.0.14-20030717)。 Postfix versions 2.0 以降: 脆弱性なし。trivial-rewrite コードは完全に再構築されたため。現在の Postfix バージョンは 2.0.13 である。 脆弱でない Postfix バージョンは、後述の回避策セクションに示される ように脆弱な Postfix システムを防ぐことができる。 Postfix versions 1.1.9 〜 1.1.12: 脆弱性がある。バージョン 1.1.13 にアップグレードまたは、後述のパッ チを適用することにより修正される。バージョン 1.1.13 は http://www.postfix.org/ 経由と各ベンダ経由で入手できる。後述の 回 避策セクションは、Postfix をすぐにはアップグレードできないサイト向 けの手引きである。 Postfix versions 1.1.9 より前: append_dot_mydomain 機能が "no" に設定されている時だけに脆弱になる (これは "postconf append_dot_mydomain" で確かめることができる)。必 要ならば、コマンド "postconf -e append_dot_mydomain=yes" を使用し て、設定をアップグレードする。 "append_dot_mydomain=no" を使用する必要があるサイトは、修正済の Postfix バージョンにアップグレードするか、このテキストの最後にある 1行パッチを適用すべきである。このパッチは Postfix バージョン 19991231 まで遡ってテストされている。 回避策 Postfix versions 1.1.9 〜 1.1.12: コマンド "postconf append_dot_mydomain" を使用して、 append_dot_mydomain 機能が "yes" に設定されているかどうかを確認す る。必要ならば、コマンド "postconf -e append_dot_mydomain=yes" を 使用して、設定をアップグレードする。 "append_dot_mydomain=no" を使用する必要があるサイトは、修正済の Postfix バージョンにアップグレードするか、このテキストの最後にある 1行パッチを適用すべきである。 main.cf に "resolve_dequoted_address=no" を記述する。 インターネットからのメールを転送する必要があるホストには、追加の回 避策が必要となる。たとえばプライマリ MX ホストや内部のホストへ転送 するホスト。これは resolve_dequoted_address=no を伴うため、Postfix はもはや user@bad.domain@good.domain をメール中継を試みていると認識 しない。この loophole を閉じるためには、SMTP 受信者アドレス内の送 信者指定のルーティングをブロックするような正規表現を使用する: /etc/postfix/main.cf: smtpd_recipient_restrictions = permit_mynetworks, check_recipient_access regexp:/etc/postfix/recipient_regexp ...other restrictions... check_relay_domains /etc/postfix/recipient_regexp: /[%!].*[%!]/ 550 Sender-specified routing rejected 回避策 脆弱な下流の Postfix システムの保護: 複数のルーティングオペレータを持つ Errors-To: メッセージヘッダを拒 否する: /etc/postfix/main.cf: header_checks = regexp:/etc/postfix/header_checks /etc/postfix/header_checks: /^errors-to:.*[%!].*[%!]/ reject 複数のルーティングオペレータを持つ SMTP 送信者アドレスを拒否する: /etc/postfix/main.cf: smtpd_sender_restrictions = check_sender_access regexp:/etc/postfix/sender_regexp ...other restrictions... /etc/postfix/sender_regexp: /[%!].*[%!]/ 550 Sender-specified routing rejected diff -cr /tmp/postfix-1.1.12/src/trivial-rewrite/resolve.c ./src/trivial-rewrite/resolve.c *** /tmp/postfix-1.1.12/src/trivial-rewrite/resolve.c Fri Nov 22 12:32:33 2002 --- ./src/trivial-rewrite/resolve.c Mon Jul 28 11:36:49 2003 *************** *** 148,153 **** --- 148,154 ---- if (saved_domain) tok822_free_tree(saved_domain); saved_domain = domain; + domain = 0; } /*