Avahiは、mDNS/DNS-SDプロトコルスイートを介してローカルネットワーク上でサービス検出を容易にするシステムです。バージョン0.9-rc2までの単純なプロトコルサーバーは、ドキュメント化されたクライアント制限を無視し、無制限の接続を受け入れてしまうため、簡単にローカルDoS攻撃を引き起こす可能性があります。`CLIENTS_MAX`は定義されていますが、`server_work()`は無条件に`accept()`を実行し、`client_new()`は常に新しいクライアントを追加し、`n_clients`をインクリメントします。制限に対するチェックは行われていません。avahi-daemonの最大ソケット数によりクライアントを受け入れられない場合、各接続ごとに無条件でエラーをログに記録します。権限のないローカルユーザーは、デーモンのメモリとファイルディスクリプタを枯渇させ、mDNS/DNS-SDのシステム全体にわたるサービス拒否を引き起こす可能性があります。ローカルのファイルディスクリプタが枯渇すると、各リクエストのエラーのログ記録によってシステムの負荷が増加します。過負荷は、nss-mdnsプラグインを使用するglibcの呼び出しによる`*.local.`名前とリンクローカルアドレスの解決を妨げます。公開時点で修正済みの既知のバージョンはありませんが、プルリクエスト808で候補となる修正が提供されており、いくつかの回避策も存在しています。単純なクライアントはnss-mdnsパッケージの機能として提供されています。unixソケット`/run/avahi-daemon/socket`は無効にできませんが、DBus経由で受信した解決要求には直接影響しません。ツールのavahi-resolve、avahi-resolve-address、およびavahi-resolve-host-nameは影響を受けず、これらはDBusインターフェースを使用しています。avahi-daemon起動後にunixソケットの権限を変更することは可能ですが、avahi-daemon自体にそのための設定はありません。SELinuxなどの追加のアクセス制限によって、望ましくないツールのソケットアクセスを防止し、信頼されたユーザーのために解決機能を維持することもできます。
|