バグレポート| 2022年1月

緊迫したサイバーセキュリティ対応の合間に
Your Cybersecurity Comic Relief

Image courtesy of https://toggl.com/

 

オミクロンはギリシャのアルファベットでは15番目の文字です。ドナルド・クヌースがBig-O notationを示すのに使い、プトレマイオスの書「アルマゲスト」ではゼロを表し、isopsephy(アイソセフィー)では70という値を持っていました。しかし、ほとんどの人にとっては、単なる「ひたすら、いつまでたっても、おわらない」パンデミックを意味するだけでしょう。2022年1月に最も多く使われたこの単語について、哲学的なことを話したくあはりませんか。脆弱性の情報収集のため記事を訪れたのですね。わかりました、内容の濃い1月のバグレポートをお届けしましょう。

  • CVE-2022-0185:なぜなら、inputのバリデーションを忘れるのはJava開発者だけではないからです
  • CVE-2021-42392: Log4shellが終わると本気で思ってました?
  • CVE-2022-21907: 小さいwarmも忘れてはいけません
  • CVE-2021-4034: PwnKit。Sudoを不十分だと判断したらどうなるでしょう

CVE-2022-21907: HTTP.sysのワーム化するバグ

20221月のパッチチューズデーでは、MicrosoftのHTTP.sysカーネルドライバーのworm化する脆弱性で新年年が始まりました。これは、7ヶ月の間にHTTP.sysで見つかった2つ目のワーム化する可能性がある脆弱性です。このドライバーのコードの成熟度を考えれば、これはかなり驚きの出来栄えです。幸い、CVE-2021-3116621907のせいでインターネットが崩壊することはありませんでした。21907は31166の不完全な修正を用いて、HTTPトレーラーのサポート(チャンク化したメッセージ末尾のメタデータ)を利用します。エクスプロイトが、最後のチャンクのTRAILERヘッダーの存在に依存するかという点は不明ですRFC では OPTIONALとしています。ネットワーク製品の署名作成のヘッダーでトレーラーをあてにできないのであれば、それは潜在的な問題です。

豆知識:PoC こちらの GitHub を参照してください

豆知識をもう一つ:すでに悪用され始めています!脅威について最新の情報を知りたければ、McAfee Insightsは必見です。

IISだけがHTTP.sysを使用しているように見えるかもしれませんが、実際のところ、このケースではそうではありません。HTTP.sys は、core HTTP を処理するコードを提供しているカーネル ドライバーです。他のサブシステムで次のコードを使用します:

  • ADFS
  • WinRM
  • インテル® ドライバー & サポート・アシスタント

サービスが使用しているドライバを確認する方法は、以下のとおりです:

PS > netsh http show servicestate

これにより、現在システムで実行されているリクエストキューとそれに関連する URLが一覧表示されます。

幸いなことに、Server 2019やWindows 10 1809のアップデートを気にかけていなかった人は、レジストリでトレーラーサポートを有効にしない限り問題ないでしょう。

対象:

240万人のTwitterユーザー。自分の環境でIISを利用する人。Docusignを使用している人(特にこのパンデミック下において、Docusignを経由した法的拘束力のある契約書の数を考えると、これは重大な問題です)。最近の市場レポートによると、インターネットサイトのおよそ7%がIISを使用しています。Microsoftでさえインターネット接続するシステムはそれほど多くないので、MS以外にもIISを使っているサイトはたくさんあります。もちろん、Windowsで脆弱性のあるデフォルトのバージョンを使っている人も対象です。

  • Windows 10 2004 以降 (both ARM、 x64)
  • Windows Server 20H2 以降

対処法:

とにかくパッチです。Microsoftは公表と同時に脆弱性に対するパッチをリリースしました。パッチが適用できない場合は、インターネットに接続できないようにすることが望ましいです。残念ながら、現在のWindowsのバージョンでは、適用可能なホストベースの緩和策はありません。

Windows Server 1909 または Windows 10 1809 を実行している場合、デフォルトでは脆弱性はありません。脆弱性のステータス確認をする場合は、以下のとおり実行してください。

PS>Get-ItemProperty“HKLM:\System\CurrentControlSet\Services\HTTP\Parameters”|Select-Object EnableTrailerSupport

返された値が0でない場合、あなたのシステムは脆弱です。これを緩和するには、次のとおり実行してください。

PS>Set-ItemProperty“HKLM:\System\CurrentControlSet\Services\HTTP\Parameters”-nameEnableTrailerSupport -Value0

もしくは、単純にレジストリキーを削除してください。

模範的な対応:

適用可能なパッチが用意されているのは良いニュースです。ぜひとも適用してください!もし仮に、パッチを適用できないなんらかの事情があるとしても悩まないでください。Trellixはこの脆弱性に対するNSP (ネットワークセキュリティプラットフォーム)のシグネチャを提供しています。ともかく、署名データベースを更新しているかということは、最低限、確認しましょう!


CVE-2021-42392: Log4Shellを狙うH2

これは、JNDI リモートクラスローディングの処理における Log4Shellに似た脆弱性です。Log4jに存在するバグを利用するわけではありませんが (Log4jは必要ですらありません)、同じ基礎技術であるJNDIを利用します。攻撃者が制御するURLでデータベースにアクセスすると、(inputはサニタイズしましたね…大丈夫ですよね?)、H2 RDBMSのコンテキストでリモートコードを実行できますが、しかし、もちろんデータベースに対して、すべてのクエリをサニタイズ、パラメータ化して保存しているので、そのようなことは起こりません。もちろんです。

対象:

Log4Jを含め、H2を利用するプロジェクトがおよそ7,000近くあると言われています。本当にLog4jJが問題だったのかなどと疑いを抱いている間にも、Log4Shellが名前を変えて、Log4jのユーザー以外にも到達してくるかもしれませんよ?どこにでも根をはびこらせるのです…

対処法:

H2データベースのバージョン 1.1.100 から 2.0.204が影響を受けます。202215日以降のバージョン2.0.206では、脆弱性を修正済です。少なくともバージョン2.0.206へのアップデートが理想的です。

データベースエンジンを変更することもできますが、これはかなり極端な解決方法だと思われます。宿主を殺して病気を治すというやり方は、医学の世界と同様、ITの世界でも推奨されない行為です。

Javaの利用をやめますか?上記と似ているように思えますが、こちらは正解です。現実問題として、明らかにこれが最善策です。Javaはサーバーの中にあるべきではなく、コーヒーカップの中にあるべきです。

模範的な対応:

パッチを当てたり、Javaのコードを全て放棄して他の言語に変えたり、データベースエンジンを交換しなくても、Trellixがカバーしています。エクスプロイト自体はLog4Shellと同類のものに見えます。

Trellixは様々な角度からお客様を保護しています(詳細については、こちらのナレッジベースの記事をご覧ください)。

  • ENS (Endpoint Security)のエキスパートルールにより、メモリ内の危険なパターンをピックアップすることができます。こちらのブログで紹介しています。
  • ENS (Endpoint Security)、VSE (VirusScan Enterprise)MWG (McAfee Web Gateway) Potentially Unwanted Softwareの検出でExploit-CVE-2021-44228.C というタイルで汎用検出を提供できます。また、この脆弱性を悪用しているキャンペーンに関連したハッシュのサンプルのリストによって、検出を補強します。
  • NSP (Network Security Platform) でも、ユーザー定義シグネチャにより、この攻撃を検出可能です。 (既出のナレッジベースの記事のリンク先にて提供) 
  • EDR (MVISION Endpoint Detection and Response), MAR (McAfee Active Response) も、RTS (リアルタイム検索) クエリで脆弱なシステムの検知に使われています。
  • McAfee SIEMにアップデート(Exploit Content Pack version 4.1.0)され、潜在的なエクスプロイトの試みに対しても警告するようになりました。

CVE-2022-0185: Linux kernel namespace のアンダーフロ......

表面的には、CVE-2022-0185はレガシーコードパスの単純な整数アンダーフローです。コンテナを使っている人にとっては幸運なことに、そのレガシーコードパスはFSC(ファイルシステムコンテキスト)内にあります。FSC はファイル コンテキスト API (FCAPI) に置き換えられましたが、脆弱なパスを含む下位互換性をサポートするために、一部の機能が保持されていました。コンテナプロセス自体のコンテキストでは、整数アンダーフローは攻撃者に無制限の書き込みを許してしまいます。コンテナにアクセスできる攻撃者は、この脆弱性を悪用して、基になるホストを攻撃し、このノードで実行されている他のすべてのコンテナにアクセスが可能になります。Kubernetes (k8s)のようなに一般に普及したツールについて考慮すると、信頼されていないユーザーの存在は、プロセス分離のためコンテナーを使用するユーザーにとって潜在的な不安材料になります。この問題は、非特権ネームスペースを使用するコンテナ、unshareコマンドを許可するコンテナ、またはCAP_SYS_ADMIN権限(デフォルトではオフ)を持つコンテナのみに影響します。Dockerコンテナでは、unshareコマンドはseccompフィルターによってデフォルトでブロックされています。残念なことに、k8sユーザーのseccompフィルターはデフォルトではオンになっていません。そのため、あらゆるKubernetesクラスタが危険にさらされていることになります。

過去を振り返りすぎると、それは進歩を遅らせることになります。この世のあらゆる素晴らしいものからゆっくりと精気を奪います。つまり、たいていの場合、後方互換性のせいで素敵なものと巡り合えなくなってしまうのです。

対象:

コンテナを動かしている人なら誰でも、潜在的に対象となりうるでしょう。そして、ユーザーにコンテナの実行を許可している管理者も同様です。更には、お持ち帰りのテイクアウトでコンテナを使う人さえも対象になる可能性があります。少し過剰反応してしまいましたが、少なくとも、共有サーバー上でコンテナを実行している人は、しっかりとこのことを留意する必要があります。基盤のカーネルがアップデートされたとわかるまでは、サーバーからミッションクリティカルなものが削除される可能性があります。この脆弱性に関する詳細なブログ記事PoC codeを公開しています。この時点では、悪意あるアクターがこの脆弱性を武器化するのは時間の問題です。私たちは皆、注意しなくてはなりません。

対処法:

もしあなたがホストをコントロールしているならば、カーネルをアップデートする必要があります。それが不可能な場合 (所有者が拒否している場合など) は、次のように実行してください。

# sysctl -w kernel.unprivileged_userns_clone =0

 CAP_SYS_ADMIN 権限を持つコンテナのみに、この脆弱性を制限します。または、コンテナからこの権限を削除することで、この脆弱性は緩和できます(デフォルトではオフになっています)。

Redhatは、コンテナを実行しないシステムに対して、単純にnamespaceを完全に無効化することを推奨しています:

# echo“user.max_user_namespaces=0” > /etc/sysctl.d/userns.conf
# sysctl -p /etc/sysctl.d/userns.conf

これで、そのホストはコンテナを実行できない状態になります。これは、コンテナを使わないのであれば、おそらく、とりあえずは良いアイデアだと思います。

模範的な対応:

この時点では、パッチを当てるか、緩和策を適用するのが最善の方法です。コンテナは分離メカニズムで使用されるため、外部プロセスが実行中のコンテナを可視化することはまずありません。パッチを適用したホストで実行するか、k8s seccomp フィルタを有効にしてください。


CVE-2021-4034: PwnKit

CVE-2021-4034、通称PwnKitは、PolKit(かつては、PolicyKitとして知られていました)のロジックバグを利用します。PolKitは、システム全体のポリシー管理キットで、特権プロセスへ特権のないプロセスを安全に(少なくとも安全だと信じられていた)アクセスできるようにします。特にこのバグはpkexecというツールに存在します(何らかの理由でsudoでは不十分であり、sudoと全く同じことをする、別のsetuidプログラムの必要性を感じたため) – 仮説ではargc変数が少なくとも1です。典型的なプログラム呼び出しでは、当然明白なことです。ほぼ間違いなく情報漏洩の兆候なので、ランタイムによって拒否されるべきなのですが、逃れる方法があるのです…

通常、pkexecの使用時には、認証情報を要求するポップアップウィンドウが表示されます。この脆弱性は、その認証チェックを回避し、単にrootとして実行されます。

これは、この6か月間で2つ目のpolkitの脆弱性です。CVE-2021-3560も、polkitの呼び出しにdbusメカニズムを使用してクレデンシャルチェックを回避します。どちらも同じルートの欠陥が利用されているようです。ついでにお話すると、2013年に最初の報告されましたが、この作者は直接的なパスを見いだせず悪用されませんでした。そのため、この哀れなパッチはに見放されたまま、輝く日を待っていたのです。9年という長い歳月を経てスイートパッチで輝きましょう! 日の目を見せてあげませんか。

対象:

これは、昨年の最大級のローカル権限昇格バグと呼んでもよさそうですね?この脆弱性は、古いpolkitバイナリを実行しているほとんどの主要なLinuxディストリビューションで動作するので、125日以降にパッチを適用していないLinuxを実行している人すべてが、脆弱な状態にさらされています。Debian は独自のフォークを保守しているため、polkit のバージョン番号は少し複雑です。

もし、

  • 0.105-26ubuntu1.2 on Ubuntu 20.04 (LTS)以前,
  • 0.105-31ubuntu0.1 on Ubuntu 21.10以前,
  • 0.105-31+deb11u1 on Debian bullseye以前, もしくは
  • polkit-0.115-11.el8_4.2 on RedHat Enterprise Linux (RHEL) 8.4 EUS以前

であるならば、脆弱な状態にあります。繰り返しになりますが、125日以降にパッチを適用していない場合は脆弱性が存在します。また、PoC codeが公開されているので、これが積極的に悪用される日も近いでしょう。

全てのユーザーを信頼しているのですか?それなら心配することはありませんね。今にも、アカウントを侵害できる状態にしているのですね。ユーザーを信用しているにしても、フィッシングかクラッキングか何による侵害かにかかわらず、どこかの侵害されたアカウントと認証情報を共有しているユーザーのアカウントまで信用して良いという話にはならないはずですが。

このバグはLinuxで発見されましたが、BSDを含む他のUNIXディストリビューションでもpolkitが使用されています。少なくとも OpenBSD では、argc 0 のプログラムの実行を拒否するなど、常にこのバグに対する緩和策を講じています。 Solaris polkit を使用していますが、Oracle Solarisに関して秘密主義であり、セキュリティ情報さえも有料です。顧客を手放さないためには良い方法ですけどね!

対処法:

アップデートです。パッチは主要なLinuxベンダーから提供されています。すぐに適用する必要があります。再起動は必要ありません。もしパッチを当てないという選択をするのであれば、pkexecsetuidビットを削除しましょう。

# chmod0755/usr/bin/pkexec

残念ながら、これでpkexecは本来設計された機能は失いますが、情報漏洩よりはマシだと思いませんか?

RedHatsecurity bulletinは、RHEL に特化した緩和策を掲載しています。

模範的な対応:

すべてのLinuxディストリビューションが調整してリリースしたものなので、本当にただ適用すれば良いだけです。変則的なログインの起点は記録し、フラグを立て、他にも認証がない場合はできる限りブロックするよう、指摘しておきます。多要素認証を使用していますよね?MFAは外部から脅威がシステムにアクセスできないよう、悪用を阻止します。内部からのインサイダー脅威に関しては、そうですね、読者への課題としておきます。

※本ページの内容は2022年2月2日(US時間)更新の以下のTrellix Storiesの内容です。
原文:The Bug Report – January 2022
著者:Kevin McGrath