Exploração inconsistente do shellshock

0

Estou tentando demonstrar a vulnerabilidade do shellshock de acordo com os comandos publicados aqui .

Eu tomei dois sistemas em consideração: o primeiro tem um bash vulnerável em $PATH ; o outro tem uma versão corrigida do bash em $PATH , e uma versão "supostamente vulnerável" em /opt/vulnerable , que foi compilada da fonte.

No primeiro sistema , posso explorar com sucesso o erro:

$ bash --version
GNU bash, version 4.1.2(1)-release (i386-redhat-linux-gnu)
[...]

$ cat << EOM | bash
> env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
> EOM
vulnerable
this is a test

No segundo sistema , como descrito acima, há um bash corrigido em $PATH e um recente (como em algumas horas atrás) compilado da versão de origem de bash in /opt/vulnerable que deve ser vulnerável:

$ bash --version
GNU bash, version 4.3.11(1)-release (i686-pc-linux-gnu)
[...]

$ /opt/vulnerable/bin/bash
GNU bash, version 4.1.0(1)-release (i686-pc-linux-gnu)
[...]

Estou passando esses comandos pela versão padrão para a versão vulnerável e não consigo explorá-la:

$ cat << EOM | /opt/vulnerable/bin/bash
> env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
> EOM
this is a test

Eu também tentei usar o script para teste, mas ele não consegue detectar vulnerabilidade. (O comando foi emitido a partir do shell com patches padrão):

$ /opt/vulnerable/bin/bash shellshock_test.sh
CVE-2014-6271 (original shellshock): not vulnerable
CVE-2014-6277 (segfault): not vulnerable
CVE-2014-6278 (Florian's patch): not vulnerable
CVE-2014-7169 (taviso bug): not vulnerable
CVE-2014-7186 (redir_stack bug): not vulnerable
CVE-2014-7187 (nested loops off by one): not vulnerable
CVE-2014-//// (exploit 3 on http://shellshocker.net/): not vulnerable

Estou fazendo algo errado aqui? Ou todos os arquivos das fontes bash em ftp.gnu.org foram corrigidos contra esta vulnerabilidade?

    
por user2064000 18.11.2015 / 17:02

1 resposta

2
$ cat << EOM | /opt/vulnerable/bin/bash
> env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
> EOM

Está errado.

Na segunda linha, você está chamando bash , que usará a versão em $PATH 1 .

Você deseja usar a versão de bash em /opt/vulnerable/bin/bash , assim:

$ cat << EOM | /opt/vulnerable/bin/bash
> env x='() { :;}; echo vulnerable' /opt/vulnerable/bin/bash -c "echo this is a test"
> EOM

Eu não vejo necessidade de você chamar bash duas vezes e usar um cachimbo assim. Por que não apenas:

$ env x='() { :;}; echo vulnerable' bash -c 'echo this is a test'

e

$ env x='() { :;}; echo vulnerable' /opt/vulnerable/bin/bash -c 'echo this is a test'

Eu verifiquei usando bash versus ~/src/bash/bash no meu sistema:

$ env x='() { :;}; echo vulnerable' bash -c 'echo $BASH_VERSION'
4.3.11(1)-release

$ env x='() { :;}; echo vulnerable' ~/src/bash/bash -c 'echo $BASH_VERSION'
4.3.42(1)-release

Notas de rodapé:

  1. Ou uma função, um alias, a versão em hash , etc.
por 19.11.2015 / 01:00