Обнаружена уязвимость в утилите sort в GNU Coreutils

Обсуждение новостей, соответствующих тематике форума

Модератор: Модераторы разделов

Аватара пользователя
Stauffenberg
Сообщения: 2041
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Обнаружена уязвимость в утилите sort в GNU Coreutils

Сообщение Stauffenberg »

ИБ-исследователь Тимо Бйохме (Timo Bцhme) обнаружил уязвимость в утилите sort(1) в пакете программного обеспечения GNU Coreutils c используемым во многих дистрибутивах обновлением i18n. Брешь может привести к переполнению буфера при обработке входных данных, содержащих UTF8-символы.

Проверить дистрибутив на наличие проблемы можно с помощью команды: printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort –f

Для устранения уязвимости уже подготовлены обновления.

источник
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21549
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Обнаружена уязвимость в утилите sort в GNU Coreutils

Сообщение Bizdelnick »

В команде опечатка — вместо дефиса тире затесалось.
А какой должен быть результат её выполнения?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2041
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: Обнаружена уязвимость в утилите sort в GNU Coreutils

Сообщение Stauffenberg »

Bizdelnick писал(а):
15.05.2015 15:59
А какой должен быть результат её выполнения?

В багзилле 2 файла прикреплено, можете использоать их как input для sort.

Код: Выделить всё

LANG=en_US.UTF-8 sort -f problem_sort_32bit.txt
LANG=en_US.UTF-8 sort -f /export/clpbrd/sort_bug_caseinsensitive.txt


Если получится воспроизвести, получите креш

Код: Выделить всё

> cat sort_bug_caseinsensitive.txt
TUNEL-positive
tumor necrosis factor-ɑ

> LANG=en_US.UTF-8 sort -f sort_bug_caseinsensitive.txt
*** Error in `sort': free(): invalid next size (fast): 0x0000000002225ff0 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x7410f)[0x7f9a0929810f]
/lib64/libc.so.6(+0x7996e)[0x7f9a0929d96e]
/lib64/libc.so.6(+0x7a647)[0x7f9a0929e647]
sort[0x4097bd]
sort[0x407c60]
sort[0x40aa10]
sort[0x404e14]
/lib64/libc.so.6(__libc_start_main+0xf5)[0x7f9a09245be5]
sort[0x405d91]
======= Memory map: ========
00400000-0041a000 r-xp 00000000 08:04 15737070                           /usr/bin/sort
0061a000-0061b000 r--p 0001a000 08:04 15737070                           /usr/bin/sort
0061b000-0061c000 rw-p 0001b000 08:04 15737070                           /usr/bin/sort
02221000-02242000 rw-p 00000000 00:00 0                                  [heap]
7f9a0900d000-7f9a09023000 r-xp 00000000 08:04 4194362                    /lib64/libgcc_s.so.1
7f9a09023000-7f9a09222000 ---p 00016000 08:04 4194362                    /lib64/libgcc_s.so.1
7f9a09222000-7f9a09223000 r--p 00015000 08:04 4194362                    /lib64/libgcc_s.so.1
7f9a09223000-7f9a09224000 rw-p 00016000 08:04 4194362                    /lib64/libgcc_s.so.1
7f9a09224000-7f9a093c9000 r-xp 00000000 08:04 4194312                    /lib64/libc-2.18.so
7f9a093c9000-7f9a095c9000 ---p 001a5000 08:04 4194312                    /lib64/libc-2.18.so
7f9a095c9000-7f9a095cd000 r--p 001a5000 08:04 4194312                    /lib64/libc-2.18.so
7f9a095cd000-7f9a095cf000 rw-p 001a9000 08:04 4194312                    /lib64/libc-2.18.so
7f9a095cf000-7f9a095d3000 rw-p 00000000 00:00 0
7f9a095d3000-7f9a095eb000 r-xp 00000000 08:04 4194340                    /lib64/libpthread-2.18.so
7f9a095eb000-7f9a097eb000 ---p 00018000 08:04 4194340                    /lib64/libpthread-2.18.so
7f9a097eb000-7f9a097ec000 r--p 00018000 08:04 4194340                    /lib64/libpthread-2.18.so
7f9a097ec000-7f9a097ed000 rw-p 00019000 08:04 4194340                    /lib64/libpthread-2.18.so
7f9a097ed000-7f9a097f1000 rw-p 00000000 00:00 0
7f9a097f1000-7f9a09811000 r-xp 00000000 08:04 4194544                    /lib64/ld-2.18.so
7f9a09875000-7f9a098b4000 r--p 00000000 08:04 16652346                   /usr/lib/locale/en_US.utf8/LC_CTYPE
7f9a098b4000-7f9a099e4000 r--p 00000000 08:04 16647123                   /usr/lib/locale/en_US.utf8/LC_COLLATE
7f9a099e4000-7f9a099e7000 rw-p 00000000 00:00 0
7f9a099fd000-7f9a099fe000 rw-p 00000000 00:00 0
7f9a099fe000-7f9a099ff000 r--p 00000000 08:04 16647142                   /usr/lib/locale/en_US.utf8/LC_NUMERIC
7f9a099ff000-7f9a09a00000 r--p 00000000 08:04 16517863                   /usr/lib/locale/en_US.utf8/LC_TIME
7f9a09a00000-7f9a09a01000 r--p 00000000 08:04 16517862                   /usr/lib/locale/en_US.utf8/LC_MONETARY
7f9a09a01000-7f9a09a02000 r--p 00000000 08:04 16652352                   /usr/lib/locale/en_US.utf8/LC_MESSAGES/SYS_LC_MESSAGES
7f9a09a02000-7f9a09a03000 r--p 00000000 08:04 16652350                   /usr/lib/locale/en_US.utf8/LC_PAPER
7f9a09a03000-7f9a09a04000 r--p 00000000 08:04 16647210                   /usr/lib/locale/en_US.utf8/LC_NAME
7f9a09a04000-7f9a09a05000 r--p 00000000 08:04 16647252                   /usr/lib/locale/en_US.utf8/LC_ADDRESS
7f9a09a05000-7f9a09a06000 r--p 00000000 08:04 16652353                   /usr/lib/locale/en_US.utf8/LC_TELEPHONE
7f9a09a06000-7f9a09a07000 r--p 00000000 08:04 16647230                   /usr/lib/locale/en_US.utf8/LC_MEASUREMENT
7f9a09a07000-7f9a09a0e000 r--s 00000000 08:04 15737929                   /usr/lib64/gconv/gconv-modules.cache
7f9a09a0e000-7f9a09a0f000 r--p 00000000 08:04 16515731                   /usr/lib/locale/en_US.utf8/LC_IDENTIFICATION
7f9a09a0f000-7f9a09a10000 rw-p 00000000 00:00 0
7f9a09a10000-7f9a09a11000 r--p 0001f000 08:04 4194544                    /lib64/ld-2.18.so
7f9a09a11000-7f9a09a12000 rw-p 00020000 08:04 4194544                    /lib64/ld-2.18.so
7f9a09a12000-7f9a09a13000 rw-p 00000000 00:00 0
7ffff42b6000-7ffff42d7000 rw-p 00000000 00:00 0                          [stack]
7ffff4382000-7ffff4384000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
Aborted

> sort --version
sort (GNU coreutils) 8.21
Copyright (C) 2013 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 Paul Eggert.

> rpm -qi coreutils
Name        : coreutils
Version     : 8.21
Release     : 7.16.1
Architecture: x86_64
Install Date: Mon 19 May 2014 12:40:50 PM CEST
Group       : System/Base
Size        : 6039946
License     : GPL-3.0+
Signature   : RSA/SHA256, Mon 24 Mar 2014 11:52:41 AM CET, Key ID b88b2fd43dbdc284
Source RPM  : coreutils-8.21-7.16.1.src.rpm
Build Date  : Mon 17 Mar 2014 11:44:05 AM CET
Build Host  : build08
Relocations : (not relocatable)
Packager    : http://bugs.opensuse.org
Vendor      : openSUSE
URL         : http://www.gnu.org/software/coreutils/
Summary     : GNU Core Utilities
Description :
These are the GNU core utilities.  This package is the union of
the GNU fileutils, sh-utils, and textutils packages.

  [ arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp
  csplit cut date dd df dir dircolors dirname du echo env expand expr
  factor false fmt fold groups head hostid id install join
  link ln logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup
  nproc numfmt od paste pathchk pinky pr printenv printf ptx pwd readlink
  realpath rm rmdir runcon seq sha1sum sha224sum sha256sum sha384sum sha512sum
  shred shuf sleep sort split stat stdbuf stty sum sync tac tail tee test
  timeout touch tr true truncate tsort tty uname unexpand uniq unlink
  uptime users vdir wc who whoami yes
Distribution: openSUSE 13.1
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Обнаружена уязвимость в утилите sort в GNU Coreutils

Сообщение Hephaestus »

Stauffenberg писал(а):
15.05.2015 15:36
уязвимость в утилите sort(1) в пакете программного обеспечения GNU Coreutils c используемым во многих дистрибутивах обновлением i18n.
Честно говоря, я не понял, что есть "обновление i18n".
Обновление чего? Пакета coreutils или чего-то другого?
Бага у меня не воспроизводится.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2041
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: Обнаружена уязвимость в утилите sort в GNU Coreutils

Сообщение Stauffenberg »

Забейте на текст с securitylab (мопед не мой, как говорится), просто смотрите fix-код на github и комментарии в bugzilla.suse.com, и все сразу станет понятно.
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
chitatel
Сообщения: 2115
ОС: Debian 13 / Xubuntu 26.04

Re: Обнаружена уязвимость в утилите sort в GNU Coreutils

Сообщение chitatel »

Боже мой! Моя любимая утилита! Как теперь жить???!!!

Код: Выделить всё

 printf '%s\n' a ɑ | MALLOC_CHECK_=1 LC_ALL=en_US.utf8 sort -f
ɑ
a


P.S.
Блин, х32 система, а подвержены 64бит, как понял.

P.P.S.

Код: Выделить всё

 LANG=en_US.UTF-8 sort -f problem_sort_32bit.txt
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXXXXɑXXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Спасибо сказали: