Perché i file temporanei con suffisso PID sono vulnerabili

2

Perché questo è un problema di sicurezza?

> 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.

La sicurezza attraverso l'oscurità non rallenta mai i moderni software di hacking e semplifica sempre il debugging.

Con la directory /tmp che ha sempre il bit sticky set (drwxrwxrwt), ciò non impedisce l'eliminazione e la sostituzione da parte di un utente malintenzionato?

Aggiornamento 2016-05-08

Sulla base della risposta di Lie Ryan, hai sperimentato i seguenti risultati ...

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

Se ho capito bene, la vulnerabilità dei file tmp con suffissi pid sarebbe di un programma dannoso che crea "un link simbolico a un file privilegiato" (presumibilmente un file eseguibile) per poterlo eseguire, anche se il proprietario del file il programma dannoso non ha altrimenti le autorizzazioni necessarie per farlo. È una comprensione corretta?

Se è così, mi manca qualcosa.

Proprietà, gruppo e permessi (OGP) si trovano sul file effettivo, non sulla voce della directory. Un collegamento simbolico è una voce di directory che punta a un'altra voce di directory.

Non capisco come un link simbolico possa aprire una vulnerabilità.

A quanto ho capito, e il mio supporto agli esperimenti, gli OGP sono globali all'intero filesystem indipendentemente da come si trova un file. Non importa se il file accede a un link simbolico, cercando le directory $PATH o inserendo direttamente l'intero percorso.

L'unico modo in cui vedo un eseguibile può essere usato per accedere a directory e file a cui il proprietario dell'eseguibile ha accesso, ma l'utente che lo esegue non lo è, se l'eseguibile ha SETUID o SETGID abilitato.

Che cosa sto fraintendendo?

    
posta DocSalvager 10.04.2016 - 23:49
fonte

1 risposta

4

Il problema è che l'attaccante può creare un link simbolico prima che un programma vulnerabile possa farlo. Ad esempio, è possibile scrivere uno script che controlla l'elenco dei processi e non appena un programma con il nome giusto viene visualizzato nell'elenco, lo script cercherà di creare un collegamento simbolico a un file privilegiato prima che il programma vulnerabile possa farlo. Se il programma vulnerabile viene eseguito come processo privilegiato (come spesso accade con i cronjob), ciò potrebbe consentire all'autore dell'attacco di scrivere su file a cui l'utente malintenzionato non dispone dei privilegi per scrivere.

In alcuni casi, è anche possibile iniziare a creare i symlink prima che il programma sia avviato, poiché il PID viene assegnato in sequenza e se si sa che un altro programma inizia sempre / spesso prima dell'avvio del programma vulnerabile, è possibile creare preventivamente alcuni file PID prima del tempo.

Una volta creato il file, la vulnerabilità non è un problema a causa del bit adesivo.

    
risposta data 11.04.2016 - 01:20
fonte

Leggi altre domande sui tag