eximのアップグレード後にDKIM構成の汚染を取り除くには?

eximのアップグレード後にDKIM構成の汚染を取り除くには?

exim4 4.94へのDebianのアップグレードは、汚染された変数と呼ばれる新しい問題をもたらしました。

私のeximが処理するダミードメインが複数あるので、変数拡張を使用してDKIMドメイン、セレクタ、キーを取得します。私の場合は000_localmacros次のようになります。

DKIM_CANON = relaxed
# Get the domain from the outgoing mail.
DKIM_DOMAIN = ${sg{${lc:${domain_data:$h_from:}}}{^www\.}{}}

DKIM_SELECTOR = ${lookup{DKIM_DOMAIN}lsearch{/etc/exim4/dkim/selector.map}}

# The file is based on the outgoing domain-name in the from-header.
DKIM_FILE = /etc/exim4/dkim/DKIM_DOMAIN/DKIM_SELECTOR/private.key

# If key exists then use it, if not don't.
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}

(これらの変数はDebianのデフォルトファイルで使用されますtransport/30_exim4-config_remote_smtp)。

残念ながら、これは次のようになります。

2021-09-10 07:13:27.625 [28932] 1mOYqk-0007WN-8p Warning: Tainted filename '/etc/exim4/dkim/example.com/n201711/private.key'

$domain文書で提案されているように、すでに交換していますが、$domain_data役に立ちませんでした。

allow_insecure_tainted_data = yes請求が削除されるようにこの問題を解決するにはどうすればよいですか?

ベストアンサー1

あなたの開会会社が好きです。

同様の問題があり、基本設定セクションで次のマクロを使用しました。

DKIM_DOMAIN = ${lc:${domain_data:$h_from:}}
DKIM_SELECTOR = ${lookup{$dkim_domain} lsearch {/etc/exim4/dkim/tags} {$value} {defaultdkimtag}}

添付/etc/exim4/dkim/tags文書は次のとおりです。

mydomain.org: sometag
myotherdomain.org: 12345

しかし、DKIM_DOMAIN結果は$h_from(潜在的な)攻撃者が設定したため、「汚染」された。これを消去するには、安全であることが知られている照会に置き換える必要があります。

私がする方法は次のとおりです。

DKIM_DOMAIN = ${lookup{${lc:${domain:$h_from:}}} lsearch,ret=key {/etc/exim4/dkim/tags}}
  • (汚染された)から$h_from...
  • 抽出フィールドを使用してください${domain:...}。これはまだ汚染されます。
  • 強制的に小文字にします${lc:...}。ただので。まだ汚染されている
  • 小文字で汚染されたドメインを見つけるには、タグファイルでlsearchを使用してください。ここではret=key、以下を意味するオプションを使用しました。ライター見つかった値は次のとおりです。「照会キーを汚染されていないバージョンに交換してください」
  • したがって、今度は汚染されていないので、他のマクロなどのその後の使用を汚染しません。

あなたの構成は

DKIM_DOMAIN = ${sg{${lc:${domain_data:$h_from:}}}{^www\.}{}}

間違っているようです${domain_data:$h_from:}-${domain_data:...}リストにはありません文字列拡張$domain_dataは有効な変数ですが、ここではそうしたいものではありません。私のようにここからドメインを抽出しようとしているようです$h_from。だからここで使うべきだと思います。${domain:$h_from:}(また終わりにあるコロンが何なのかよくわかりませんが、皆さんにお任せします。)

次に、次の操作を行います。

DKIM_DOMAIN = ${sg{${lc:${domain:$h_from:}}}{^www\.}{}}

ただし、ファイルパスに外部から提供される値を許可するため、これは依然として汚染されています。

だから私は次の解決策を提案します。

FROM_DOMAIN_WITHOUT_WWW = ${sg{${lc:${domain:$h_from:}}}{^www\.}{}}
DKIM_DOMAIN = ${lookup{FROM_DOMAIN_WITHOUT_WWW} lsearch,ret=key {/etc/exim4/dkim/selector.map}}

または追加のマクロが気に入らない場合:

DKIM_DOMAIN = ${lookup{${sg{${lc:${domain:$h_from:}}}{^www\.}{}}} lsearch,ret=key {/etc/exim4/dkim/selector.map}}

おすすめ記事