В утилите sort, поставляемой в составе GNU Coreutils c используемым во многих дистрибутивах патчем i18n, выявлена (http://seclists.org/oss-sec/2015/q2/466) уязвимость (https://bugzilla.suse.com/show_bug.cgi?id=928749), которая может привести к переполнению буфера при обработке входных данных, содержащих UTF8-символы с большими кодами. Наличие проблемы подтверждено в openSUSE, RHEL и Fedora. Для устранения уязвимости подготовлен патч (https://github.com/pixelb/coreutils/commit/bea5e36c).
Протестировать подверженность дистрибутива проблеме можно при помощи команды:<font color="#461b7e">
printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -fError in `sort': free(): invalid next size (fast): 0x0000000000947ff0
</font>
URL: http://seclists.org/oss-sec/2015/q2/466
Новость: http://www.opennet.me/opennews/art.shtml?num=42235
Debian Jessie (без обновления):
$ printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
ɑ
a
В убунтах 14.10 и 15.04 тоже не работает...
14.04 тоже не подвержена
12.04 тоже не подвержена
Там нет этого патча.
Distributor ID: Debian
Description: Debian GNU/Linux 7.8 (wheezy)
Release: 7.8
Codename: wheezy
Всё пучком. Походу красношляпые проморгали чего то :)
В Gentoo ~amd64 и ~x86 тоже:$ printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
ɑ
aПохоже, уязвимость только в сильно умных дистрах, лепящих сторонние патчи направо и налево.
Debian Wheezy 7.8 backports
$ printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
ɑ
a
$ printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
ɑ
a
$ sort --version
sort (GNU coreutils) 8.23
Упакован Gentoo (8.23 (p1.0))
Copyright (C) 2014 Free Software Foundation, Inc.
Лицензия GPLv3+: GNU GPL версии 3 или новее <http://gnu.org/licenses/gpl.html>
Это свободное ПО: вы можете изменять и распространять его.
Нет НИКАКИХ ГАРАНТИЙ до степени, разрешённой законом.Авторы программы -- Mike Haertel и Paul Eggert.
Уязвимость RPM дистрибутивов, можем расходиться...
> Уязвимость RPM дистрибутивов, можем расходиться...Ох уж эти ламеры.
$ printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
ɑ
a
$ rpm -qf =sort
coreutils-8.22-alt1
Михаил, если будет варемя, ответьте п-ста на это http://www.opennet.me/openforum/vsluhforumID3/102459.html#592
Нужно чтоб все, прочитавшие новость, выложили свои выводы с шелла
~ > printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
ɑ
a
Gentoo stable, не работает:
> printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
> ɑ
> a
archlinux:
printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
ɑ
a
Fedora 22:
$ printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
a
ɑ
ХЗ работает или нет...
$ printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
*** glibc detected *** sort: free(): invalid pointer: 0x00000000008ee050 ***
ɑ
a
CentOS 6.6
> *** glibc detected *** sort: free(): invalid pointer: 0x00000000008ee050 ***Поздравляю, Шарик, у тебя - работает. Уязвимость.
Centos7
printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
*** Error in `sort': free(): invalid pointer: 0x00000000013d7050 ***
a
ɑ
Mageia 5 RC:
printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
*** Error in `sort': free(): invalid pointer: 0x0000000002332050 ***
a
ɑ
Это еще раз демонстрирует проблему современных дистростроителей: вместо того, чтобы связываться с "авторами" при обнаружении проблемы, они таскают не-пойми-какие т.н. "стабильные версии" подпертые со всех сторон костылями.
Иногда с авторами невозможно связаться, иногда принятие патча в апстрим занимает _годы_.
По моему опыту, попытка (!) связаться с авторами --- это скорее исключение из общего правила "нахреначить своих костылей в меру своего понимания проблемы и засунуть результат в пакет".
> Это еще раз демонстрирует проблему современных дистростроителей: вместо того, чтобы связываться
> с "авторами" при обнаружении проблемы, они таскают не-пойми-какие т.н. "стабильные версии"
> подпертые со всех сторон костылями.Попробуй авторов GNU Coreutils убедить принять патч для полноценной поддержки UTF-8. Пока никому не удавалось.
> никому не удавалось.Зато редхату, блин, удалось. Повесить баг отсутствовавший в оригинале.
>> никому не удавалось.
> Зато редхату, блин, удалось. Повесить баг отсутствовавший в оригинале.Баги есть везде. И их патч я хотел бы видеть в Debian, чтобы не приходилось привлекать утилиты из Plan 9 (9base) или Heirloom, когда мне нужна поддержка UTF-8 в tr.
Тот самый патч, который породил данную новость?
> Тот самый патч, который породил данную новость?Ну что поделать, баги бывают везде.
ну и немного мамонта CentOS release 4.8 (Final)printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
malloc: using debugging hooks
ɑ
a
Ждём уязвимостей в /bin/true и /bin/false.
> Ждём уязвимостей в /bin/true и /bin/false.Они не работают с данными.
Ага, переполнение в /dev/null
Не сочтите за троллинг, но всё же.$ strace true
execve("/bin/true", ["true"], [/* 20 vars */]) = 0
brk(0) = 0x93cc000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb774c000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=93781, ...}) = 0
mmap2(NULL, 93781, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7735000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/i386-linux-gnu/i686/cmov/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\240o\1\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1437864, ...}) = 0
mmap2(NULL, 1452408, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb75d2000
mprotect(0xb772e000, 4096, PROT_NONE) = 0
mmap2(0xb772f000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x15c) = 0xb772f000
mmap2(0xb7732000, 10616, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7732000
close(3) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb75d1000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb75d18d0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0xb772f000, 8192, PROT_READ) = 0
mprotect(0x804d000, 4096, PROT_READ) = 0
mprotect(0xb776b000, 4096, PROT_READ) = 0
munmap(0xb7735000, 93781) = 0
exit_group(0) = ?Думаю, тут можно притулить свой LD_PRELOAD
> Думаю, тут можно притулить свой LD_PRELOAD...и возвращать вместо TRUE FALSE? С ехидным бухтением про "счастливой отладки, сyки"? :)
/tmp% printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
ɑ
a
/tmp% uname -a
Linux nejdanchik 3.17.7-gentoo #3 SMP Tue Jan 20 10:39:51 MSK 2015 x86_64 Intel(R) Core(TM) i3 CPU M 380 @ 2.53GHz GenuineIntel GNU/LinuxС какими use-флагами собирать, чтобы уязвимость заработала?
Сказано же: для внедрения уязвимости нужно пропатчить.
Шляпа и Сусь - пропатчили.
$ uname -a
Linux comp-celeron-cpu-7ce4e6.localdomain 3.14.41-std-def-alt1 #1 SMP Thu May 7 12:49:34 UTC 2015 i686 GNU/Linux
[sb@comp-celeron-cpu-7ce4e6 ~]$ printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
ɑ
aAlt Linux Simply 7.0.5
printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
ɑ
aP.S. grep NAME /etc/os-release
NAME="Arch Linux"
PRETTY_NAME="Arch Linux"sort --version
sort (GNU coreutils) 8.23
Copyright (C) 2014 Free Software Foundation, Inc.
Лицензия GPLv3+: GNU GPL версии 3 или новее <http://gnu.org/licenses/gpl.html>
Это свободное ПО: вы можете изменять и распространять его.
Нет НИКАКИХ ГАРАНТИЙ до степени, разрешённой законом.Авторы программы -- Mike Haertel и Paul Eggert.
Linux Mint 17 - не работает.
3.13.0-32-generic Ubuntu x86_64 GNU/Linuxprintf '%s\n' a | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
a
Хоспате, даже скопапастить не могут уже!
Интерасно, почему данная проблема классифицирована как уязвимость, а не как ошибка?
1. Переполнение буфера теоретически можно использовать для выполнения кода.
2. Из первого следует что sort file.txt
эквивалентно chmod +x ./file.txt ; ./file.txt
Для коллекции =)
Debian Jessie, amd64$ printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
a
ɑ
OpenSUSE 13.2 x64printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
*** Error in `sort': free(): invalid pointer: 0x0000000001c4b810 ***
a
ɑ
elementary OS freya:printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
ɑ
a
Ещё не все пришли :D
Еще не все)
Fedora 21:printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
a
ɑ
Fedora 20 x86_64 $ printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
*** Error in `sort': free(): invalid pointer: 0x0000000001295050 ***
a
ɑ
Сортируй меня, сортируй меня полностью!
Почему где-то
a
ɑ
А где-то
ɑ
a
По моему здесь не заданы условия.KEYDEF is F[.C][OPTS][,F[.C][OPTS]] for start and stop position, where F is a field number and C a character position in the field; both are origin 1, and the stop
position defaults to the line's end.Поэтому сортировки здесь никакой нет, просто показана возможность эксплуатировать уязвимость.
> Сортируй меня, сортируй меня полностью!Нифига себе сортир...
Windows NT 10.0.10074 MSYS2$ printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
a
ɑ
Во, а кого-то тем временем уже в мозгу уязвимость расплодилась
> Во, а кого-то тем временем уже в мозгу уязвимость расплодиласьЕго микрософт уже поимел - если это десятка, бета, то она отсылает на сервера микрософта все, вплоть до нажатий клавиш. Ломать такую систему бесполезно - с пола упасть нельзя.
$ uname -a
Darwin mars.Dlink 14.3.0 Darwin Kernel Version 14.3.0: Mon Mar 23 11:59:05 PDT 2015; root:xnu-2782.20.48~5/RELEASE_X86_64 x86_64
$ printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
a
ɑ
Нужна фряха и соляра ещё :D
Зачем? Там sort не гнутый ....
Кто мешает поставить?
> Нужна фряха и соляра ещё :DНе в FreeBSD ни в Solaris GNU утилит уже давно нет, хотя я сомневаюсь что в Solaris они вообще были.
Откуда дровишки что в Solaris нет GNU утилит?http://pkg.oracle.com/solaris/release/en/search.shtml?token=...
Страшно жить, почему в калькуляторе винды не находят уязвимостей?
Я почти уверен, что они там есть ;) Просто M$ за это мзду получает.
> Страшно жить, почему в калькуляторе винды не находят уязвимостей?Так микрософт в бетаверсии десятки просто отсылает себе все нажатия клавиш. Зачем им при этом уязвимости? Они и так при таком раскладе узнают что ты в калькуляторе считал, если им это станет интересно.
I will never go out of business in this country. thanks to Microsoft. who would have thought that wincalcis vulnerable? I have not checked all systems yet, so this is my configuration: Windows 7 Ultimate SP1 x86-64, English.1) run calc.exe;
2) press “Alt-2″ to go to “Scientistic” mode (“Programmer” mode works too);
3) type “1/255″ and press [ENTER] or [=]
4) press the button [F-E];
В Мак0Си всё раб0тает:MacBook-1:~ a1$ printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
a
ɑ
MacBook-1:~ a1$
> В Мак0Си
> Жырная ЖопаТы сюда себя порекламировать пришёл, затейник?