Security
9 min read
1859 views

Symlink Attacks: ファイル操作が信頼を裏切るとき

IT
InstaTunnel Team
Published by our engineering team
Symlink Attacks: ファイル操作が信頼を裏切るとき

シンボリックリンクは、現代のオペレーティングシステムで最も強力な機能の一つであり、柔軟なファイル管理や洗練されたシステムアーキテクチャを可能にします。しかし、この柔軟性は危険な攻撃面も生み出し、世界中の開発者やセキュリティチームを悩ませ続けています。DockerやKubernetesのコンテナエスケープから、WindowsやLinuxシステムでの権限昇格まで、symlink攻撃は依然として進化し続ける脅威です。

シンボリックリンクとそのセキュリティへの影響

シンボリックリンク(symlink)は、別のファイルやディレクトリへのポインタや参照として機能する特殊なタイプのファイルです。ハードリンクがディスク上のデータを直接指すのに対し、symlinkはターゲットへのパスを含み、実質的に高度なショートカットとして働きます。この間接性が、便利さと危険性の両方を生み出しています。

アプリケーションがsymlinkをたどるとき、通常は操作を行うプロセスの権限でターゲットファイルにアクセスします。これは、リンクを作成したユーザーの権限ではなく、実行中のプロセスの権限でアクセスされることを意味します。この挙動は、攻撃者が特権的なファイル操作を意図しない場所にリダイレクトしたり、アクセス制御を回避したり、システムの重要なリソースを操作したりする機会を生み出します。

symlinkのセキュリティ上の根本的な懸念は、OSがファイルパスを解決する方法にあります。特権のあるプロセスがsymlinkを含むパスを開くと、そのリンクを透過的にたどり、元のリクエスト者がアクセスすべきでないファイルにアクセスする可能性があります。戦略的にsymlinkを作成できる攻撃者は、この挙動を利用して、意図しない範囲のファイルを読み書きしたり削除したりできます。

Symlink攻撃の構造

symlink攻撃は、一般的にいくつかのカテゴリーに分類され、それぞれ異なるファイルシステムの挙動やアプリケーション設計の側面を悪用します。

ファイルアップロードと抽出の脆弱性

最も一般的な攻撃ベクトルの一つは、アーカイブの展開です。2018年に公開された “Zip Slip” という研究によって広まったこの脆弱性は、多くのプログラミングエコシステムに影響を与えました。攻撃は、パストラバーサルシーケンスやsymlinkを含む悪意のあるアーカイブファイルを利用し、展開時に意図しない場所にファイルを書き込みます。

この攻撃のsymlinkバリアントは特に巧妙です。攻撃者は、展開ディレクトリの外に向かうsymlinkエントリを含むアーカイブを作成し、その後に同じ名前の通常のファイルを配置します。展開中に最初にsymlinkが作成され、任意の場所へのパスが確立されます。次に、そのファイルが展開されると、アプリケーションはsymlinkをたどり、攻撃者が制御するターゲットに内容を書き込みます。

このパターンは、現代のソフトウェアでも引き続き見られます。2025年4月には、人気のGoライブラリmholt/archiverにおいてZip Slipの脆弱性(CVE-2025-3445)が発見されており、長年の認識にもかかわらず、新たな事例がレガシーから最新のコードベースまで継続して出現しています。

symlinkレースコンディション(TOCTOU)

時間差を利用したTOCTOU(Time-Of-Check to Time-Of-Use)レースは、symlink脆弱性のもう一つの主要なカテゴリーです。これらの攻撃は、アプリケーションがファイルの属性を確認した後、実際に使用するまでの間のウィンドウを悪用します。攻撃者は、この間に正当なファイルをsymlinkに置き換えることで、操作を意図しないターゲットにリダイレクトできます。

典型的な例は、ファイルの権限を確認してから操作を行う特権プログラムです。悪意のあるユーザーは、アクセスできないファイルへのsymlinkを作成します。特権プログラムがその名前のファイルを作成または変更するとき、実際にはsymlink先のターゲットに対して操作が行われ、攻撃者が制御する内容が挿入される可能性があります。

これらのレースは、実世界でも大きな影響を及ぼしています。2025年10月、AWSは、DynamoDBのDNS管理システムにおけるTOCTOUレースにより、米国東部リージョンで広範なサービス障害を引き起こしました。この事件は、レース条件が高度なインフラストラクチャにも影響を与えることを示しています。

コンテナエスケープ:隔離境界の突破

DockerやKubernetesなどのコンテナ技術は、Linuxの名前空間とファイルシステムの隔離に大きく依存しています。symlink攻撃はこれらの境界を突破し、攻撃者がコンテナの隔離を抜けてホストシステムにアクセスするのに効果的であることが何度も証明されています。

Leaky Vesselsの脆弱性

2024年1月、SnykはDockerとKubernetesにおいて、コンテナに特化したsymlink攻撃の4つの重大な脆弱性を発見したと発表しました。CVE-2024-21626は、runCコンテナランタイムに影響し、ファイルディスクリプタのリークを悪用してsymlinkを使い、ホストファイルシステムへのアクセスを可能にしました。

悪意のあるコンテナイメージは、symlink操作を通じてパスを設定し、コンテナの作業ディレクトリからホストファイルシステムへのアクセスを提供することができました。これにより、リークしたファイルディスクリプタの権限に応じて、読み取り・書き込み・実行権限が付与される可能性があります。

CVE-2024-23651は、Dockerのビルドプロセス中にsymlinkのレース状態を利用した脆弱性です。キャッシュの無効化時にsymlink操作を巧みにタイミング調整することで、攻撃者は重要なホストディレクトリをコンテナのファイルシステムにマウントし、データの漏洩や権限昇格を可能にしました。

2025年のrunCの脆弱性

2025年11月、runCにおいて新たな高深刻度の脆弱性(CVE-2025-31133、CVE-2025-52565、CVE-2025-52881)が公開され、コンテナのセキュリティに新たな課題をもたらしました。これらの脆弱性は、runCがマスクされたパスやマウントターゲット、procfsへの書き込みを扱う方法に関係し、レース条件やsymlinkの悪用によって引き起こされます。

runCは、/dev/nullを使ってホストの重要なファイルをマスクしていますが、その検証が不十分なため、攻撃者はコンテナの初期化中にsymlinkと置き換えることが可能です。これにより、任意のホストパスをバインドマウントし、/proc/sys/kernel/core_patternなどの重要な場所に書き込みを行えるようになり、コンテナエスケープの一因となっています。

Kubernetesのログマウントのエスケープ技術も、これらのリスクを示しています。Kubernetesは、/var/logにpodのログを保存し、symlinkを使ってコンテナのログファイルにリンクしています。アクセス権を持つ攻撃者は、これらのsymlinkを操作して、Kubernetesのログインターフェースを通じて任意のホストファイルを読み取ることが可能です。これにより、正規の機能が攻撃に利用される例となっています。

デスクトップシステムでの権限昇格

コンテナを超えて、symlink攻撃は従来のWindowsやLinuxシステムでも強力な権限昇格手法として利用されています。

Windowsの権限昇格

Windowsは、攻撃者が連鎖させて権限昇格を狙える複数のsymlinkタイプを提供しています。NTFSジャンクション(ディレクトリレベルのリダイレクト)、オブジェクトマネージャのシンボリックリンク、レジストリキーのシンボリックリンクなどです。James Forshawらの研究では、これらのプリミティブを組み合わせることで、特権プロセスに対して強力な攻撃が可能になることが示されています。

CVE-2019-1161は、Windows Defenderの脆弱性の一例です。SYSTEM権限で動作するMpSigStub.exeプロセスは、オブジェクトマネージャのsymlinkを操作して任意のファイルを削除できました。攻撃者は、Defenderのファイル操作をリダイレクトするsymlinkを作成し、最高権限での任意ファイル削除を実現しました。

Microsoftは、サンドボックス化されたプロセスが特定のsymlinkタイプを作成できないよう制限したり、検証チェックを追加したりと対策を講じています。しかし、2025年10月に公開されたCVE-2025-55696(NtQueryInformationTokenのTOCTOUレース)では、Windowsカーネルのコードがレースベースの攻撃に依然として脆弱であることが示されました。

LinuxとUnixの脆弱性

Linuxシステムは、/tmpのような世界書き込み可能なディレクトリでのsymlink攻撃に特有の課題を抱えています。CVE-2022-29799とCVE-2022-29800のNimbuspwn脆弱性は、systemdのnetworkd-dispatcherにおいて、ディレクトリトラバーサルとsymlinkレースを組み合わせてroot権限昇格を実現しました。

カーネル開発者は、stickyディレクトリ(例:/tmp)に対して、所有者またはターゲット所有者だけがsymlinkをたどれるよう保護策を実装しています。ただし、これらの保護はすべてのシナリオをカバーしておらず、脆弱なアプリケーションは依然として発見されています。

Appleエコシステム:symlinkを使ったTCCバイパス

2024年12月、Jamf Threat LabsはCVE-2024-44131を公開し、iOSやmacOSのAppleのTransparency, Consent, and Control(TCC)フレームワークをsymlink攻撃で回避できることを示しました。この脆弱性はFileProviderコンポーネントに存在し、悪意のあるアプリがユーザーファイル操作を傍受し、symlinkを通じてリダイレクトできるものでした。

ユーザーがFilesアプリを使ってファイルを移動・コピーするとき、背景で動作する悪意のあるアプリがsymlinkを操作し、操作をリダイレクトして、健康情報や写真、カメラやマイクのアクセス権を不正に取得することが可能でした。Appleは、iOS 18とmacOS Sequoia 15でsymlinkの検証を強化し、対策を講じました。

防御戦略と対策

symlink攻撃から守るには、多層的なアプローチが必要です。安全なコーディング、システムの堅牢化、ランタイム監視を組み合わせることが重要です。

安全なファイル操作

特権を持つファイル操作を行うアプリケーションは、複数の防御策を実装すべきです。O_NOFOLLOWフラグを使ってファイルを開くと、symlinkの自動解決を防ぎ、明示的にsymlinkを扱う必要があります。敏感な操作を行う前に、lstat()などの関数を使ってパスがsymlinkかどうかを確認し、そのターゲットを検証します。

アーカイブ展開時は、解決後のパスが意図したディレクトリ内に留まることを確認してください。Goのfilepath.EvalSymlinksや他の言語の類似機能を使って、展開前に完全なパスを解決し、symlinkが外部を指す場合は拒否します。symlinkを含むアーカイブは、外部を指すものを除外するか、スキップするのが安全です。

レースコンディションの対策

TOCTOU脆弱性を排除するには、チェックと使用を原子操作で行う必要があります。O_CREAT|O_EXCLを使った一時ファイルの作成は、既存のファイルと衝突しない安全な方法です。mkstemp()は、予測可能な名前を避ける安全な一時ファイル作成関数です。

WindowsのLockFileExなどのファイルロックAPIも役立ちますが、すべての攻撃シナリオを防ぐわけではありません。可能な場合は、パスではなくファイルディスクリプタを使って操作し、パスの変更に影響されずに済ませるのが望ましいです。

システムレベルの保護

OSには、symlinkの保護機能が備わっています。Linuxのfs.protected_symlinks sysctl設定は、stickyディレクトリ内でのsymlinkの追従を制限します。WindowsのDefender Credential Guardやアプリケーションのホワイトリストも、不正なコードの実行やsymlink攻撃のリスクを低減します。

コンテナ環境では、ホストのrootユーザをマッピングしないユーザ名前空間を有効にすることで、名前空間内のユーザがホストファイルにアクセスできなくなります。rootlessコンテナは、root権限を排除することで、コンテナエスケープの潜在的なダメージを大きく減らします。Pod Security Standardsの適用、seccompプロファイルの設定、AppArmorやSELinuxのポリシーも、攻撃対象となるシステムコールやファイルシステムの攻撃面を最小化します。

監視と検出

セキュリティチームは、特に敏感なディレクトリや特権のないプロセスからの不審なsymlink作成パターンを監視すべきです。EDRソリューションは、迅速なsymlink作成や異常なマウント操作、/procやその他の重要な場所への予期しない書き込みを検知できます。

ランタイムセキュリティツールのFalcoは、コンテナの初期化時にsymlinkが敏感なホストディレクトリを指す操作を監視し、コンテナエスケープの試みを検出します。これらのイベントとプロセスの挙動を関連付けることで、正当な操作と攻撃の違いを識別します。

まとめ

symlink攻撃は、OSの基本的な機能を悪用するため、根本的なバグではなく、排除が非常に難しい脅威です。CVEsの絶え間ない流入は、コンテナランタイムからモバイルOSまで、さまざまな環境でsymlinkを安全に扱うことの難しさを示しています。

組織にとっては、symlinkを継続的な脅威と認識し、対策を講じる必要があります。安全なコーディングの実践、コンテナランタイムやシステムコンポーネントの最新化、OSレベルの保護の有効化、ファイルシステム操作の可視化と監視を行うことが重要です。

クラウドネイティブアーキテクチャの普及とともに、symlinkを悪用した攻撃の攻撃面は拡大しています。コンテナの隔離を提供するランタイム層は、symlink操作によって境界を突破される可能性のある単一障害点となっています。これらの攻撃を理解し、包括的な防御策を実施することは、現代のコンピューティング環境の安全性を維持するために不可欠です。

Continue from this article into the most relevant product guides and workflows.

Related Topics

#symlink attacks, symbolic link vulnerability, symlink race condition, symlink privilege escalation, file upload symlink exploit, symlink container escape, symlink race attack, symlink exploitation, symlink vulnerability 2025, symlink bypass, symlink file overwrite, linux symlink attack, symlink security, symlink exploitation tutorial, symlink mitigation, symlink detection, symbolic link abuse, symlink privilege escalation linux, file operation race condition, symlink race exploit, symlink attack example, symlink race example, symlink race prevention, symlink exploitation CVE, symlink file disclosure, symlink directory traversal, zip symlink extraction, tar symlink vulnerability, container symlink exploit, docker symlink attack, kubernetes symlink vulnerability, symlink to root, symlink privilege escalation example, symlink security misconfiguration, symlink file replacement, symlink unsafe extraction, symlink upload bypass, symlink web server exploit, symlink directory escape, symlink hard link confusion, symlink permissions flaw, symlink access control bypass, symlink temporal vulnerability, symlink race mitigation, symlink vulnerability testing, secure file extraction, symlink safe file handling, symlink monitoring, symlink race defense, symlink file operation hijacking, symlink privilege abuse, symlink write outside directory, symlink symbolic link exploit

Keep building with InstaTunnel

Read the docs for implementation details or compare plans before you ship.

Share this article

More InstaTunnel Insights

Discover more tutorials, tips, and updates to help you build better with localhost tunneling.

Browse All Articles