systemadmin.es > Seguridad > Bug en grep que podría permitir la ejecución de código

Bug en grep que podría permitir la ejecución de código

Entre los bugs de Ubuntu hay siguiente report sobre grep que podría permitir la ejecución de código simplemente haciendo grep en una cadena.

En la descripción del bug podemos ver que indica que afecta a grep <2.11, por lo que la versión de grep en CentOS 6 debería ser vulnerable:

# grep -V
GNU grep 2.6.3

Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Si probamos el comando que indica, podemos verificar que efectivamente se produce un segmentation fault:

# perl -e 'print "x"x(2**31)' | grep x > /dev/null
Segmentation fault

Mirando en los registros del core (ulimit -c) no he visto 0x78 (correspondiente a la x)

(gdb) info registers
rax            0x12e13e0	19796960
rbx            0x12e09a0	19794336
rcx            0x7f2e70612001	139837430636545
rdx            0x100000000	4294967296
rsi            0xffffffff	4294967295
rdi            0x7f2e70612000	139837430636544
rbp            0x7f2e70612001	0x7f2e70612001
rsp            0x7fff3d3e8468	0x7fff3d3e8468
r8             0x0	0
r9             0x7fff3d3e8418	140734220895256
r10            0x100001001	4294971393
r11            0x1	1
r12            0x619900	6396160
r13            0x7f2e70612001	139837430636545
r14            0x7f2e70612001	139837430636545
r15            0x7fff3d3e85e0	140734220895712
rip            0x7f30f633cd4b	0x7f30f633cd4b
eflags         0x10286	[ PF SF IF RF ]
cs             0x33	51
ss             0x2b	43
ds             0x0	0
es             0x0	0
fs             0x0	0
gs             0x0	0

Tampoco tengo idea de cómo analizar este bug en arquitectura x86_64. El tamaño de entrada que necesita para producir este segmentation fault es de 2G:

$ echo "2^31" | bc -l
2147483648
# echo "2147483648/1024/1024/1024" | bc -l
2.00000000000000000000

La parte curiosa es que no se produce con cualquier tamaño superior:

# perl -e 'print "x"x((2**31)-2)' | grep x > /dev/null
# perl -e 'print "x"x(2**32)' | grep x > /dev/null
# perl -e 'print "x"x(10+2**31)' | grep x > /dev/null
# perl -e 'print "x"x(1+2**31)' | grep x > /dev/null

Sino que sólo lo he podido reproducir con 2^31 y con 2^31-1:

# perl -e 'print "x"x((2**31)-1)' | grep x > /dev/null
Segmentation fault (core dumped)

2 comments to “Bug en grep que podría permitir la ejecución de código”

  1. Por añadir algo más, en Centos 5.8 que tiene la grep 2.5.1 da el mensaje de “grep: line too long” asi que o bien metieron entre esas versiones el bug o no todas son vulnerables (en una Centos 6.3 que he probado me mata el proceso por lo que no se produce, pero no puedo asegurar qué configuración tenga)

  2. Yo también lo he probado en una CentOS 6.3 y ha funcionado, curioso porque no he hecho nada especial. ¿Que arquitectura es? Quizá se muere por falta de memoria…

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>