access(2) のマニュアルページには、
警告 Access() は潜在的なセキュリティ ホールであり、決して使用しないでください。
しかし、セキュリティ ホールとは何ですか? なぜ使用してはいけないのでしょうか?
access(2) のマニュアルページには、
警告 Access() は潜在的なセキュリティ ホールであり、決して使用しないでください。
しかし、セキュリティ ホールとは何ですか? なぜ使用してはいけないのでしょうか?
私のシステムのマニュアルページから:
警告: access() を使用して、ユーザーがファイルを開く権限を持っているかどうかを確認します。たとえば、open(2) を使用して実際にファイルを開く前に確認すると、ユーザーはファイルを確認してから開くまでの短い時間を悪用する可能性があるため、セキュリティ ホールが作成されます。それを操作します。このため、このシステムコールの使用は避ける必要があります。(上記の例では、プロセスの実効ユーザー ID を一時的に実際のユーザー ID に切り替えてから、open(2) を呼び出す方がより安全です。)
したがって、問題は、ユーザーが他のファイルにアクセスするために悪用できる競合状態を作成することです。
次のシナリオ例を想像してください。/tmp/file
書き込みを許可されたファイルを作成します。次に、uid-0 プログラムを呼び出しaccess()
て、このファイルへの書き込みアクセスを許可する前に、このファイルを書き込み用に開くことが許可されているかどうかを確認します。
access()
との呼び出しの間の短いスペースでopen()
、それを削除/tmp/file
して へのシンボリック リンクに置き換えることができ/etc/crontab
ます。アプリケーションが喜んで への書き込みアクセスを許可してくれるので、好きなプログラムをシステムで実行できるようになりました/etc/crontab
。
Linux のマニュアルページで明確に説明されています
警告:
access()
たとえば、 open(2) を使用して実際にファイルを開く前に、ユーザーがファイルを開く権限を持っているかどうかを確認するために を使用すると、セキュリティ ホールが作成 されます。 . このため、このシステムコールの使用は避ける必要があります。
また、注意してください。セキュリティ上の理由から、セキュリティ エクスプロイトは一般に公開されていません。
チェックアウト: http://www.kernel.org/doc/man-pages/online/pages/man2/access.2.html
警告: access() を使用してユーザーがファイルを開く権限を持っているかどうかを確認します。たとえば、open(2) を使用して実際にファイルを開く前に確認すると、ユーザーはファイルの確認と開くまでの短い時間間隔を悪用する可能性があるため、セキュリティ ホールが作成されます。それを操作します。このため、このシステムコールの使用は避ける必要があります。(上記の例では、プロセスの実効ユーザー ID を一時的に実際のユーザー ID に切り替えてから、open(2) を呼び出す方がより安全です。)
以下も参照してください。