SpoolFool: Windows 印刷スプーラーの悪用再び
2022 年 2 月 23 日 Ryan Estes 著
Microsoft の月例パッチが今月も公開されました。つまり、新たな脆弱性が判明したということです。今回のパッチではゼロデイ脆弱性 1 件を含む合計 70 件の脆弱性が修正されました。いずれも Microsoft の「深刻な脆弱性」カテゴリに該当するものではありません。しかし、Windows Print Spooler(印刷スプーラー)サービスを標的とした特権昇格の脆弱性が 4 件あり、多くの人がこれに気づかなかった可能性があります。この記事では、Microsoft が印刷スプーラーサービスに関連するバグとどのように対策を続けてきたかを要約し、以前に問題になった脆弱性を参照しつつ、SpoolFool(CVE-2022-21999)が Microsoft による防御策を回避するために、どのようにピギーバックをしてきたかを簡潔に検証します。
印刷スプーラーは、ユーザがプリンタとやり取りをするための Windows 内の主要コンポーネントです。これにはさまざまなプリンタのドライバ管理、印刷ジョブの作成、およびデータのエンコーディングが含まれます。Microsoft が印刷スプーラーを導入したのは、20 年以上前の初期 Windows NT で、以来すべての Windows OS に含まれています。問題が起きやすい一因はその古さにあると考えられます。それにもかかわらず、印刷スプーラーはすべての Windows OS でデフォルトで有効になっている機能であり、さらに Windows NT 4 でユーザモードからカーネルモードに移行されたため、攻撃者にとって格好の標的になっています。そのため、印刷スプーラーサービスの脆弱性の悪用に成功すると深刻な事態を引き起こす可能性が高くなっています。
Stuxnet の発見時に公表された 4 件の脆弱性の中にも印刷スプーラーの脆弱性があり、当時すでに Microsoft が把握していたことからもそれは明らかです。Stuxnet マルウェアは印刷スプーラーサービスを悪用し、Windows で最も高い権限を持つアカウントである NT AUTHORITY\SYSTEM としてコード実行を行いました。これにとどまらず、Microsoft は過去 3 年間でいくつかの印刷スプーラーサービスの脆弱性への対応を迫られてきました。そのうちの 1 つは、PrintDemon(CVE-2020-1048)として知られています。
2020 年 5 月に公開されパッチが適用された PrintDemon は、攻撃者が「ディスク上のファイルへのプリンタポートを作成することで、任意のファイルを書き込むことができる」というものでした。つまり攻撃者がシステム上にマルウェアをドロップし、それを堂々と実行できるということです。Microsoft は、ユーザがポートを追加する前に権限の確認を行うようにしてこの欠陥を修正しました。しかし VoidSec がシンボリックリンクを使用してセキュリティチェックを回避し、PrintDemon の修正をわずか 1 週間で突破したため、印刷スプーラーのさらなる調査が研究者に促されました。さらに、同じバグを悪用したとされる 7 件の情報が Microsoft に開示されています。CVE-2020-1337 と指定されたこの回避方法に対して、最終的にパッチが適用されたのは 2020 年 8 月でした。翌 9 月、 Microsoft は「プリンタの SpoolDirectory 属性を設定する」ことで攻撃者がファイルやディレクトリを作成できるようになっていた別の脆弱性にパッチを適用し、CVE-2020-1030 と指定しました。これに対する Microsoft による解決策は、現在のユーザがファイルまたはディレクトリを作成する権限を持っているかどうか、それぞれ権限のチェックを適用することでした。
またこれには 1 週間以上かかりましたが、2021 年 7 月、研究者は PrintNightmare(CVE-2021-34527)と名づけられた別のゼロデイ脆弱性を発見しました。PrintNightmare を悪用するには、攻撃者が認証されている必要があります。しかしいったん認証されると、攻撃者は NT AUTHORITY\SYSTEM としてコードを実行することができます。これが可能なのは、Windows が、プリンタやドライバを追加できる機能へのユーザによるアクセスを制限できないためです。
これらを前提として、過去 3 年間印刷スプーラーサービスを悩ませてきた脆弱性の次なる刺客、SpoolFool を紹介します。前述の通り、SpoolFool は先週の火曜日に Microsoft の月例パッチで公開されたもので、CVE-2022-21999 と指定されています。SpoolFool は、実は先に触れた CVE-2020-1030 への対策で導入された権限チェックを2つの方法で回避します。先の脆弱性が権限のチェックを回避したように、SpoolFool はこのアイデアを利用して、シンボリックリンクを使用して任意のファイルを書き込むために別の権限確認の回避を実行します。この脆弱性を回避する方法については、Oliver Lyak 氏の技術記事(英語)を参照されることを強く推奨します。
以上の流れを見ると、Windows の印刷スプーラーサービスに関する脆弱性の情報がこれで最後になるとは考えにくいでしょう。Windows で最も古いコンポーネントの 1 つであるだけでなく、適切に悪用されれば攻撃者に完全なシステムアクセスを許してしまい、ユーザや組織がこの機能を無効にしていない限り、デフォルトで有効になっている可能性が高いのです。SpoolFool、そしてそれ以前の脆弱性はすでに修正されていますが、これからも印刷スプーラーをめぐる問題は出てくるでしょう。