LINUX.ORG.RU

Уязвимость в утилите grep

 ,


0

3

В утилите GNU grep обнаружена опасная уязвимость, которая проявляется при обработке входного потока и может быть использована для инициирования отказа в обслуживании и выполнения произвольного кода.

Уязвимы версии grep до версии 2.11 при обработке строки данных более 2 Гб на 64-битном хосте.

Ошибка может произойти, если не хватает доступной оперативной памяти, или если библиотека GNU C регулярных выражений не может справиться с такими длинными строками.

Команда для проверки уязвимости:

perl -e 'print "x"x(2**31)' | grep x > /dev/null
Ошибка сегментирования означает наличие уязвимости.

>>> Подробности

★★★★★

Проверено: tazhate ()
Последнее исправление: Silent (всего исправлений: 5)
perl -e 'print "x"x(2**31)' | grep x > /dev/nullperl -e 'print "x"x(2**31)' | grep x > /dev/null
~> perl -e 'print "x"x(2**31)' | grep x > /dev/null
Ошибка сегментации
~>

freebsd 9.0-p5

IPR ★★★★★
()
 landgraf@landgraf ~ $ perl -e 'print "x"x(2**31)' | grep x > /dev/null
landgraf@landgraf ~ $ uname -a
Linux landgraf 3.6.3-zen #1 ZEN SMP PREEMPT Sun Nov 11 07:17:20 MSK 2012 x86_64 Pentium(R) Dual-Core CPU T4500 @ 2.30GHz GenuineIntel GNU/Linux


Но ноут конкретно подвис на минуту.

Landgraf ★★★★★
()

в моём дебиане с сегфолтом упал perl, а не grep.

maloi ★★★★★
()
perl -e 'print "x"x(2**31)'
Out of memory!


Конструкторы ноутбука предвидели эту уязвимость и защитили покупателей от неё.

tiandrey ★★★★★
()
Последнее исправление: tiandrey (всего исправлений: 1)
Ответ на: комментарий от iZEN

Откуда оно возьмется на FreeBSD? 12309 является эксклюзивной фичей Linux.

monsta_kill
()
Ответ на: комментарий от KivApple

Не знаю как насчёт вышеописанной уязвимости, но на наличие бага 12309 этот однострочник точно проверяет...

Подтверждаю, комп встал колом.

Turbid ★★★★★
()
aol@hp:~$ perl -e 'print "x"x(2**31)' | grep x > /dev/null
aol@hp:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 12.04.1 LTS
Release:	12.04
Codename:	precise
aol@hp:~$ 

haters gonna hate, чо..

aol ★★★★★
()

time perl -e 'print «x"x(2**31)' | grep x > /dev/null grep: память исчерпана

real 0m5.052s user 0m1.969s sys 0m5.618s

uname -a Linux linups 3.7.0-geek #1 SMP PREEMPT Sat Dec 15 18:45:32 YEKT 2012 x86_64 AMD Phenom(tm) II X4 965 Processor AuthenticAMD GNU/Linux

grep -V grep (GNU grep) 2.14

ничего колом не встаёт. 8гиг рамы, свопа нет.

ass ★★★★
()
Ответ на: комментарий от tazhate

сделайте уже нотифайки в почту на ответы =)

А по сабжу - мне как-то пофиг из чего заходить на тысячи серверов. Работает, жрать не просит, и черт с ней.

inkvizitor68sl
()

Опять что-то в моей генте патчить придется.
Сначала понял, что греп у меня бизибоксовый, потом понял, что гнутый еще с сентября на версии 2.14.
А потом, что perl нифига не выдает)

devl547 ★★★★★
()
$ perl -e 'print "x"x(2**31)' | grep x > /dev/null
grep: (standard input): Cannot allocate memory
$ uname -a
Linux Inspiron-7720 3.2.0-34-generic #53-Ubuntu SMP Thu Nov 15 10:48:16 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
$ dpkg-query -s grep
Package: grep
Essential: yes
Status: install ok installed
Priority: required
Section: utils
Installed-Size: 608
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Version: 2.10-1
segfault ★★★★★
()
Ответ на: комментарий от mine
$ perl -e 'print "x"x(2**31)' | grep x > /dev/null
grep: (стандартный ввод): Невозможно выделить память
$ grep -V
grep (GNU grep) 2.10
$ uname -a
Linux big-mouse 3.2.0-35-generic #55-Ubuntu SMP Wed Dec 5 17:42:16 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
mm3 ★★★
()

grep падает. grep -F не падает.

anonymous
()
[build@localhost ~]$ perl -e 'print "x"x(2**31)' | grep x > /dev/null
[build@localhost ~]$ uname -a
Linux localhost 3.6.10-1-ARCH #1 SMP PREEMPT Tue Dec 11 09:40:17 CET 2012 x86_64 GNU/Linux
[build@localhost ~]$ perl -v

This is perl 5, version 16, subversion 2 (v5.16.2) built for x86_64-linux-thread-multi

Copyright 1987-2012, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

[build@localhost ~]$ 
flareguner
()

у патрика как всегда все в порядке

anonymous
()
Ответ на: комментарий от splinter

Нафиг злоумышленник будет грепать строку больше 2 Гб? Для того, что бы использовать уязвимость, очевидно же.

ForwardToMars
()
root@yashko-ThinkPad-Edge:/home/yashko# grep -V
grep (GNU grep) 2.10
Copyright (C) 2011 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.

Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.
root@yashko-ThinkPad-Edge:/home/yashko# perl -e 'print "x"x(2**31)' | grep x > /dev/null
Out of memory!
root@yashko-ThinkPad-Edge:/home/yashko# uname -a
Linux yashko-ThinkPad-Edge 3.2.0-35-generic #55-Ubuntu SMP Wed Dec 5 17:42:16 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux 
sudoer
()
$ perl -e 'print "x"x(2**31)' | grep x > /dev/null
grep: память исчерпана
$  uname -a
Linux dragonfly 3.2.0-4-amd64 #1 SMP Debian 3.2.32-1 x86_64 GNU/Linux 
MikeB ★★★★
()
nirdosh@linux-uo8i:~> perl -e 'print "x"x(2**31)' | grep x > /dev/null
[1]    25859 done                perl -e 'print "x"x(2**31)' | 
       25860 segmentation fault  grep --color=auto x > /dev/null
nirdosh@linux-uo8i:~> uname -a                                        
Linux linux-uo8i 3.1.10-1.16-desktop #1 SMP PREEMPT Wed Jun 27 05:21:40 UTC 2012 (d016078) x86_64 x86_64 x86_64 GNU/Linux
nirdosh@linux-uo8i:~> grep --version
grep (GNU grep) 2.9
Copyright (C) 2011 Free Software Foundation, Inc.
Лицензия GPLv3+: GNU GPL версии 3 или новее <http://gnu.org/licenses/gpl.html>
Это свободное ПО: вы можете продавать и распространять его.
Нет НИКАКИХ ГАРАНТИЙ до степени, разрешённой законом.

Авторы программы — Майк Хертель (Mike Haertel) и другие, см. <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.
nirdosh@linux-uo8i:~> free -m
             total       used       free     shared    buffers     cached
Mem:         16057      11803       4254          0        311       7109
-/+ buffers/cache:       4382      11674
Swap:            0          0          0
Nirdosh
()

Debian stable - ошибки нет.

udachnik@debian:~$ perl -e 'print "x"x(2**31)' | grep x > /dev/null
udachnik@debian:~$ 

Polugnom ★★★★★
()
Последнее исправление: Polugnom (всего исправлений: 1)
$ uname -a
Linux xxxx-xxx01x 3.2.0-33-generic #52-Ubuntu SMP Thu Oct 18 16:29:15 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 12.04.1 LTS
Release:        12.04
Codename:       precise
$ perl -e 'print "x"x(2**31)' | grep x > /dev/null
Segmentation fault
Reset ★★★★★
()
nkt@arnor ~ % perl -e 'print "x"x(2**31)' | grep x > /dev/null
nkt@arnor ~ % uname -a
Linux arnor 3.5.7-gentoo #1 SMP PREEMPT Sun Nov 25 17:18:54 MSK 2012 i686 Intel(R) Core(TM)2 CPU T5500 @ 1.66GHz GenuineIntel GNU/Linux
nkt@arnor ~ % grep --version
grep (GNU grep) 2.14
Copyright (C) 2012 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.

Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.
nkt@arnor ~ % 
fat_angel ★★★★★
()

Команда для проверки уязвимости:

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

Вот, ещё один однострочник на перл. :)

Stalin ★★★★★
()

У меня всё ништяк:

"perl" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
CARS ★★★★
()
┌─[20:37][leave][web_deploy] 
└─╼ time perl -e 'print "x"x(2**31)' | grep x > /dev/null

real	0m5.312s
user	0m2.364s
sys	0m4.176s

┌─[20:37][leave][web_deploy] 
└─╼ uname -a
Linux leave-laptop 3.6-trunk-amd64 #1 SMP Debian 3.6.9-1~experimental.1 x86_64 GNU/Linux

┌─[20:37][leave][web_deploy] 
└─╼ free -m
             total       used       free     shared    buffers     cached
Mem:          7917       3402       4514          0         10       1038
-/+ buffers/cache:       2353       5563
Swap:         9535         18       9517

┌─[20:37][leave][web_deploy] 
└─╼ grep --version
grep (GNU grep) 2.14

leave ★★★★★
()

У меня почему-то на Генте (довольно древнего обновления):

perl -e 'print "x"x(2**31)'
сразу выходит и ничего не выдает. Если поменять на
perl -e 'for($i = 0; $i <= 2**31; $i++) { print "x" }'
то все работает и даже комп колом не стоит вовсе, но результатов grep'ования до сих пор жду.

proud_anon ★★★★★
()
Последнее исправление: proud_anon (всего исправлений: 1)
$ perl -e 'print "x"x(2**31)' | grep x > /dev/null
panic: realloc at -e line 1.
$ uname -a
MINGW32_NT-6.1 INTV64-THINK 1.0.17(0.48/3/2) 2011-04-24 23:39 i686 Msys
buddhist ★★★★★
()
Ответ на: комментарий от KivApple

Не знаю как насчёт вышеописанной уязвимости, но на наличие бага 12309 этот однострочник точно проверяет...

Предполагаю, это не 12309, а просто скрипт на Perl сначала конструирует строчку в 2**31 байт в памяти.

proud_anon ★★★★★
()

Больше на Си программируйте - и не такое будет.

Nxx ★★★★★
()
Ответ на: комментарий от proud_anon

Уязвимы версии grep до версии 2.11 при обработке строки данных более 2 Гб на 64-битном хосте.

А, блин, не прочитал сразу. Тогда что ж я тестирую? У меня ж grep 2.12 на 32-битном хосте.

proud_anon ★★★★★
()
Ответ на: комментарий от proud_anon

Да, но система очень хорошо при этом своппится (4 ГБ ей стало мало) со всеми вытекающими последствиями.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 2)

на моём vps со squeeze

$ perl -e 'print "x"x(2**31)' | grep x > /dev/null
$ uname -a
Linux invyvps 2.6.32-pony6-3 #1 SMP Tue Mar 13 07:31:44 PDT 2012 i686 GNU/Linux
$ grep --version
GNU grep 2.6.3
$ free -m
             total       used       free     shared    buffers     cached
Mem:           256         59        196          0          0          0
-/+ buffers/cache:         59        196
Swap:            0          0          0

invy ★★★★★
()

«Out of memory!» при ограничении адресного пространства 2 GiB (ulimit -v $(( (1024**2)*2 ))). Проработало 5,5 (grep) + 3,1 (perl) секунды без данного ограничения. Не валится. Получившим «Out of memory!» проверить «ulimit -a».

ZyX
()
# perl -e 'print "x"x(2**31)' | grep x > /dev/null
grep: (standard input): Invalid argument
# grep --version
grep (GNU grep) 2.5.1-FreeBSD

на бзде ниработаит :(

Komintern ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.