OpenBSD の脆弱性により、smtpd、ldapd、radiusd で権限昇格と認証バイパスが可能になる

クアリス株式会社 明らかに 4人 脆弱性 OpenBSD では、そのうち XNUMX つは認証なしで一部のネットワーク サービスにリモート接続できるようにし、他の XNUMX つはシステム内での権限を高めることができます。 Qualys のレポートでは、OpenBSD 開発者の迅速な対応が指摘されています。すべての問題は 排除された в OpenBSD 6.5 и OpenBSD 6.6 非公開通知後 40 時間以内。

リモートから悪用可能な脆弱性は、libc ライブラリ内の認証ハンドラーへの呼び出しを調整する際のエラーによって引き起こされます。
コマンドラインで引数を渡す /usr/libexec/auth/login_style プログラム。 オプションのパラメータ「-s service」を使用してlogin_styleを呼び出す場合を含め、プロトコルの名前を渡すことが許可されます。 ユーザー名の先頭に「-」文字が使用されている場合、この名前は、login_style の実行時にオプションとして扱われます。 したがって、認証時にユーザー名として「-schallenge」または「-schallenge: passwd」を指定すると、login_style はそのリクエストをハンドラーを使用するリクエストとして認識します。 S/キー.

問題は、login_style の S/Key プロトコルが形式的にのみサポートされているが、実際には認証成功のサインの出力では無視されることです。 したがって、攻撃者は「-schallenge」ユーザーになりすまして認証をバイパスし、パスワードやキーを指定せずにアクセスできるようになります。 認証に通常の libc 呼び出しを使用するすべてのネットワーク サービスは、この問題の影響を受ける可能性があります。 たとえば、smtpd (AUTH PLAIN)、ldapd、radiusd では認証をバイパスする機能が確認されています。

sshd にはシステム内でのユーザーの存在をチェックする追加の保護機能があるため、この脆弱性は現れません。 ただし、sshd は、システムが脆弱性の影響を受けやすいかどうかをテストするために使用できます。ユーザー名「-sresponse:passwd」にアクセスすると、sshd は、login_passwd が呼び出し (チャレンジ) のパラメータを返し、login_passwd が返されるのを待つため、接続がハングします。不足しているパラメータの転送を待ちます (名前「-sresponse」はオプションとして使用されます)。 潜在的なローカル攻撃者は、su ユーティリティで認証をバイパスしようとする可能性がありますが、「-sresponse」という名前を渡すと、getpwnam_r("-schallenge", ...) 関数の実行時に null ポインターが返されるため、プロセスがクラッシュします。 。

その他の脆弱性:

  • CVE-2019-19520 - グループを「auth」に変更する sgid フラグが付属する xlock ユーティリティの操作によるローカル権限昇格。 xlock コードでは、ユーザー ID (setuid) が変更された場合にのみライブラリ パスの再定義が禁止されています。これにより、攻撃者は環境変数 "LIBGL_DRIVERS_PATH" を変更し、コードが実行される共有ライブラリのロードを整理することができます。 「auth」グループへの権限昇格後。
  • CVE-2019-19522 - システムで S/Key または YubiKey 認証が有効になっている場合 (デフォルトでは有効になっていない)、「auth」グループのローカル ユーザーが root としてコードを実行することを許可します。 上記の xlock 脆弱性を悪用してアクセスできる「auth」グループのメンバーであるため、/etc/skey および /var/db/yubikey ディレクトリにファイルを書き込むことができます。 たとえば、攻撃者は新しい /etc/skey/root ファイルを追加して、S/Key を介した root 認証用のワンタイム キーを生成する可能性があります。
  • CVE-2019-19519 - su ユーティリティを使用した操作によってリソース制限が増加する可能性。 「-L」オプションを指定すると、失敗した場合に認証試行を周期的に繰り返すことになり、ユーザー クラスは XNUMX 回だけ設定され、その後の試行ではリセットされません。 攻撃者は、別のアカウント クラスで他人のログインを入力しようとする最初の試行では「su -l -L」を実行できますが、XNUMX 回目の試行では自分自身で認証に成功する可能性があります。 この状況では、最初の試行時に指定されたユーザー クラスに対応する制限がユーザーに設定されます (プロセスの最大数やプロセスのメモリ サイズなど)。 root ユーザーは Wheel グループに属している必要があるため、この方法は非特権ユーザーから制限を借用する場合にのみ機能します。

さらに、注目できるのは、 実装 OpenBSD では、システム コールの有効性をチェックするための新しい方法が導入されており、脆弱性の悪用がさらに複雑になっています。 この方法では、あらかじめ登録されたメモリ領域からシステムコールがアクセスされた場合にのみシステムコールを実行することができます。 メモリ領域にマークを付けるには 提案された 新しいシステムコール msyscall().

出所: オープンネット.ru