web-dev-qa-db-ja.com

rootが所有し、グローバルに書き込み可能な壊れたシンボリックリンクを介してrootになることは可能ですか?

サーバーの脆弱性を探しています。 /varディレクトリを探していると、次のような結果が得られます。

drwxr-xr-x  3 root root 4.0K Aug 14 21:02 kerberos
drwxr-xr-x 12 root root 4.0K Nov 11 05:04 lib
drwxr-xr-x  2 root root 4.0K Jun 10  2014 local

lrwxrwxrwx  1 root root   11 Aug 14 21:00 lock -> ../run/lock     <-- CHECK THIS

drwxr-xr-x  3 root root 4.0K Aug 14 21:05 log
lrwxrwxrwx  1 root root   10 Aug 14 21:00 mail -> spool/mail
drwxr-xr-x  2 root root 4.0K Jun 10  2014 nis
drwxr-xr-x  2 root root 4.0K Jun 10  2014 opt
drwxr-xr-x  2 root root 4.0K Jun 10  2014 preserve
lrwxrwxrwx  1 root root    6 Aug 14 21:00 run -> ../run
drwxr-xr-x  4 root root 4.0K Aug 14 21:00 spool

lock "ファイル"のアクセス許可を見ると、他のユーザーのアクセス許可はrwxであることがわかります。したがって、所有者ではない別のユーザー(この場合はroot)がこの「ファイル」を読み取り、実行、および書き込みできる可能性があるため、lockがどのようなファイルであるかを確認します。

file lock
lock: broken symbolic link to `../run/lock'

stat lock

File: ‘lock’ -> ‘../run/lock’
  Size: 11          Blocks: 0          IO Block: 4096   symbolic link
Device: fb01h/64257d    Inode: 6424574     Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-11-14 00:18:52.218518690 +0000
Modify: 2015-08-14 21:00:52.000000000 +0000
Change: 2015-11-11 04:56:35.543404826 +0000
 Birth: -

この情報によると、ルートを取得し、この権限を使用して他の情報にアクセスしたり、コマンドを実行したりできますか?

たとえば、私は試しました:

echo  "ls /etc" >> lock

しかし、私はPermission deniedを受け取ります。

いくつかの質問:

  1. ロック許可についての私の解釈は正しいですか?

  2. この壊れたシンボリックリンクを利用して何かをすることはできますか?

  3. この壊れたシンボリックリンクでどんな種類の質問をする必要がありますか?

いいえ、そのようなリンクを使用してルートを取得することは通常不可能です。

より具体的な質問に回答するには:

1.ロック許可についての私の解釈は正しいですか?

この「ファイル」が実際のファイルであり、シンボリックリンクではなかった場合、解釈は正しくなりますが、正しくありません。

シンボリックリンク(別名symlinks)アクセス許可はほとんど常に無視されます。symlinksは、それらが指すファイルから実際のアクセス許可を継承します。表示されるrwxrwxrwxアクセス許可は、単に詰め物と見なすことができます。 POSIX標準 は、OSがシンボリックリンクに対してどの権限を表示する必要があるかを定義することさえできないほど真実です。

作成されたシンボリックリンクのファイルモードビットの値は指定されていません。 POSIX.1-2008で指定されたすべてのインターフェースは、stat構造体のst_modeフィールドで返されるファイルモードビットの値が指定されていないことを除いて、シンボリックリンクの内容を常に読み取ることができるかのように動作します。

一部のシステムはすべての許可ビットセット(あなたの場合のようにrwxrwxrwx)を表示し、他のシステムはリンクされたファイルが存在する場合はその許可を表示し、一部はさらにビットandリンクとターゲット権限間の操作...).

これらのアクセス許可はほぼ常に無視されると上記で述べました。これは、OSのハンドフルでは完全に真実ではないためです。たとえば、Mac OS Xシステムは上記のPOSIX標準から逸脱しており、read権限がリンク解決機能を制御します。これは、影響が非常に少ない(良好または悪い)セキュリティの面で(それはシステムを維持することを幾分困難にするだけです)。

それで、これらすべてを念頭に置いて、この壊れたリンクに対するあなたの現在の許可は何ですか?存在する場合はターゲットと同じです。ただし、ターゲットが存在しないため、十分なパラメーターがある場合でも、リンクを使用して操作を実行することはできません(そのため、壊れています。単に機能しません)。

2.この壊れたシンボリックリンクを利用して何かを行うことはできますか?

壊れたリンク自体は異常ではなく、セキュリティ上の弱点はありません。このようなリンク切れは、chrootまたはネットワーク共有を使用する環境でよく見られます。シンボリックリンクは、正しいルートを使用するか、正しいネットワーク共有をマウントしたもののみを正常に解決します。

3.この壊れたシンボリックリンクではどのような質問をする必要がありますか?

パスが/var/lockであり、存在しないディレクトリ/run/lockを指すリンクがあります。 /var/lockパスを引き継ぐには、これら2つのパスの1つだけを改ざんできれば十分です。

  • ターゲットの親ディレクトリまたはそのパスを構成するディレクトリに対する書き込み権限はありますか?はいの場合、不足しているディレクトリを作成して引き継ぐことができます。そうでない場合、欠落しているターゲットディレクトリを改ざんすることはできません。欠落したままになります。
  • リンクの親ディレクトリまたはパスを構成するディレクトリへの書き込み権限はありますか?はい、リンクを別のリンクに置き換えることができます。所有しているディレクトリ(たとえば/home/myuser/fakelockを指す)をポイントし、アプリケーションがvar/lockに入れようとするすべてのロックを制御します。道。

これらのディレクトリのいずれにも書き込み権限がない場合、あなたはねじ込みで調査を続ける必要があります。ここでは悪用するものは何もありません。

1
WhiteWinterWolf

シンボリックリンクの権限は、ほとんど意味がありません。読み取り権限がない場合、それが指している場所を確認できません。書き込み権限がない場合、ターゲットを変更することはできませんが、それだけです。実際には、0777以外の権限を持つリンクを作成します。かなりのトリックです。リンクのターゲットに対する権限により、ターゲットで実行できる操作が決まります。ルート所有の壊れたリンクのターゲットを作成したファイルで置き換える場合、ターゲットはあなたが所有し、関係なく適切に動作します直接アクセスしたか、リンクを介してアクセスしたか。

1
Mark