web-dev-qa-db-ja.com

PIDサフィックスが一時ファイルに脆弱性があるのはなぜですか

なぜこれがセキュリティの問題なのですか?

> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=820331
>
> very predictable temporary files (like
> /tmp/cronic.out.$$) that depends only on PID:

> OUT=/tmp/cronic.out.$$
> ERR=/tmp/cronic.err.$$
> TRACE=/tmp/cronic.trace.$$

> "$@" >$OUT 2>$TRACE

Use CVE-2016-3992.

隠すことによるセキュリティは、最新のハッキングソフトウェアの速度を低下させることはなく、常にデバッグを困難にします。

/tmpディレクトリには常にスティッキービット(drwxrwxrwt)が設定されているので、悪意のあるユーザーによる削除と置換が妨げられませんか?

2016年5月8日更新

Lie Ryanの回答に基づいて、次の結果を実験しました...

System
  Puppy Linux 5.2.8 (based on Ubuntu 10.04)

Privileged User
  root
    /etc/passwd
      root:x:0:0:root:/root:/bin/bash
    $PATH
      :/root/bin::/src/bin:/root/bin:/bin:/usr/bin: ...
    > groups root
      root : root tty
    > id -nG root
      root tty

Unprivileged User
  spot
    /etc/passwd
      spot:x:502:502:Linux User,,,:/home/spot:/bin/sh
    $PATH
      :/root/bin::/src/bin:/root/bin:/bin:/usr/bin: ...
    > groups spot
      spot : spot
    > id -nG spot
      spot

Owners, Groups, Permissions
  > ls -l /bin/busybox /bin/cat
    -rwxr-x--- 1 root root 637960 2011-08-17 11:04 /bin/busybox
    -rwxr-xr-x 1 root root  50820 2011-08-17 11:04 /bin/cat

  > ls -l /usr/bin/less
    lrwxrwxrwx 1 root root 17 2011-08-17 10:49 /usr/bin/less -> ../../bin/busybox

  > ls -l /home/spot/myless /home/spot/text
    lrwxrwxrwx 1 spot spot 13 2016-05-08 12:23 /home/spot/myless -> /usr/bin/less
    -rw-r--r-- 1 spot spot 12 2016-05-08 13:01 /home/spot/text

Expected Behavior
  Thus, unprivileged user 'spot' should be able to run 'cat', but not 'less'.

Attempt to run 'less' via the symlink (indented for clarity)

  root@LX03:~  su spot     

  spot@LX03:~  pwd
    /home/spot

  spot@LX03:~  echo $PATH
    :/root/bin::/src/bin:/root/bin:/bin:/usr/bin: ...

  spot@LX03:~  ls -l myless text
    lrwxrwxrwx 1 spot spot 13 2016-05-08 12:23 myless -> /usr/bin/less
    -rw-r--r-- 1 spot spot 12 2016-05-08 13:01 text

  spot@LX03:~  cat text
    sample text

  spot@LX03:~  myless text
    sh: ./myless: Permission denied

私が正しく理解していれば、pidサフィックスが付いたtmpファイルの脆弱性は、悪意のあるプログラムの所有者が実行できるようにするために、悪意のあるプログラムが「特権ファイルへのシンボリックリンク」(おそらく実行可能ファイル)を作成することです。それ以外の場合は、そうするために必要な権限を持っていません。これは正しい理解ですか?

もしそうなら、私は何かが欠けています。

所有権、グループ、およびアクセス許可(OGP)は、ディレクトリエントリではなく、実際のファイルにあります。シンボリックリンクは、別のディレクトリエントリを指すディレクトリエントリです。

シンボリックリンクがどのように脆弱性を開くことができるのかわかりません。

私が理解し、私の実験がサポートしているように、OGPは、ファイルの場所に関係なく、ファイルシステム全体に対してグローバルです。 $PATHディレクトリを検索するか、パス全体を直接入力することによって、ファイルがシンボリックリンクによってアクセスされるかどうかは関係ありません。

実行可能ファイルを表示する唯一の方法は、実行可能ファイルの所有者がアクセスできるディレクトリとファイルにアクセスできますが、実行可能ファイルを実行しているユーザーは、実行可能ファイルでSETUIDまたはSETGIDが有効になっている場合です。

私は何を誤解していますか?

2
DocSalvager

問題は、攻撃者が脆弱なプログラムよりも先にシンボリックリンクを作成できることです。たとえば、プロセスリストを監視するスクリプトを作成すると、適切な名前のプログラムがリストに表示されるとすぐに、脆弱なプログラムが実行する前に、スクリプトが特権ファイルへのシンボリックリンクを作成しようとします。脆弱なプログラムが特権プロセスとして実行されている場合(cronジョブがよくあるように)、これにより、攻撃者が書き込む特権を持たないファイルに攻撃者が書き込むことができる可能性があります。

場合によっては、プログラムが開始する前にシンボリックリンクの作成を開始することもできます。これは、PIDが順番に割り当てられ、脆弱なプログラムが開始する前に別のプログラムが常に/頻繁に開始することがわかっている場合は、事前にいくつかのPIDファイルをプリエンプティブに作成できるためです。 。

ファイルが作成されると、スティッキービットのために脆弱性は問題になりません。

4
Lie Ryan