Pull to refresh

Comments 50

bash отожрал гиг памяти и попросил ещё.
Самое забавное, что Ctrl+C остановило операцию, но занятая память продолжает висеть
У меня занятая память сразу же освободилась.
FreeBSD 7.1-RELEASE, sh
Анонимного FTP у меня нет, но надо что-то с этим делать…
mac os 10.6.3, bash — результат аналогичный. Память освободилась только после того, как был убит не ls, а сам bash.

P.S.: Моя любовь к vsftpd себя оправдала и я этому очень рад :)
странно, у меня(Arch) память освободилась сразу же после ctrl+c
Похоже причина в специфике управления памятью в БСДях. Мак ОС ведь тоже немного БСД :)
php 5.3.1 win64 apache2, через 3 секунды после запуска скрипта с print glob("../../*/../*/*/../../*/*/*/*"); прекращается выполнение, процесс апача успевает занять 25мб. Логично предположить что пхп справляется с этой проблемой :)
логично посмотреть php.ini
уйблин)) там вобще винда
Если речь о ограничении времени выполнения то 30с. а максимальный объем занимаемой памяти 512Мб.
Вы уверены, что ваш windows использует glibc?
Я не очень.
Ваш windows — в смысле «установленный у вас», а не в холиварном.
Насколько мне известно, есть порт glibc только под win32.
Нет. Не уверен, пардоньте за нубство :)
Андрюша 2.2 до сих пор подтормаживает: никогда дезайр еще так не тормозили, хотя память потихоньку освобождается.
Mac OS X 10.6.5 — bash сжирает память и проц.
ftp> ls ./../../*/*/../*/../*/*/*/../…
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
226 Transfer done (but failed to open directory).

И ничего.
Судя по Python 2.6.6, питоновский код работает.
Там Python 2.5.2 и список папок выводится.
FreeBSD 8.1-RELEASE amd64

[user@axe ~]$ ls ../../*/../*/*/../../*/*/*/*
ls: ../../*/../*/*/../../*/*/*/*: No such file or directory

ls ../../../*/*/../../*/*/*/../…

вывод очень длинный и похож на ls -R /
У меня вообще не пашет (FreeBSD 8.1-RELEASE amd64)

root@....# ls ../../*/../*/*/../../*/*/*/*
/sbin/ls: Argument list too long.
Возможно мне изменяет память, но про эти смешные регэкспы, подвешивающие юникс, я ещё в институте знал.
Ваша память изменяет вам с форк-бомбами, видимо, а не с «регекспами», подвешивающими юникс.
Нет, причём тут эта форк-бомба?

Я точно помню это в споре о разнице парсинга звезды в DOS (где звезда означает «дальше не важно») и в unix. Как раз тогда приводился пример кода, который подвешивал и cmd, и юникс — и там как раз было несколько звёздочек.

Строка выглядела примерно как a*aa*aa*aa*a*a. Найти информацию сейчас не смог, в те времена интернетов особо не было…
Речь, как я понимаю, шла об эксплуатации worst-case execution time для бэктрекинга. Например, для алгоритма Кнута-Морриса-Пратта строка вида «aaaaaaaaaa» сама по себе является наихудшим паттерном, сопоставление может идти очень долго. Если при этом добавить в паттерн вайлдкарды, бэктрекинг совсем сойдёт с ума и будет работать дольше, чем O(n^2).

Вот, пример нашёл такой: esyr.org/wiki/UNИX%2C_весна_2008%2C_11_лекция_%28от_23_апреля%29, главы «Алгоритм бэктрекинга» и «Утилиты (продолжение) ».
Ага, ага, спасибо, начинаю медленно вспоминать о чём тогда речь шла.
Ну то есть, в данном случае проблема совсем в другом :)
да, уточняю, этот баг (в том виде, как обсуждали) требовал наличия файла с несколькими aaa в каталоге.
Этот баг требует правильности пути. Видимо, исправив(или нет?) его, разработчики упустили противоположный вариант, о котором говорится в топике — проверка не происходит «в случае задания некорректных путей в шаблоне».
Потому что в тот момент все символы подстановки называли регэкспами. Говорил по памяти, извините, 10 лет прошло уже.
Если мне память не изменяет, в те времена все символы подстановки называли маской.
ну или дикими картами )))) (wildcards)
гента 2.6.35, пробывал с питоном, медленно ест память, 100% загрузки одного ядра
Ubuntu 10.04 — сожрало гиг памяти и целиком одно ядро.
Debian GNU/linux 2.6.26-2-686, zsh
сжрал мегабайт 250, потом процесс завершился (suspended), память не освободил
Да, да чтото я не то сказанул, естественно не освободил, раз он был suspended
Не работает оно давно.
А для фтп vsftpd ставьте, он не использует эту библиотеку.
slowpok so slow, камменты выше читал, сам пробовала?
пробовал. баш съедает мегабайт 50 памяти и дропается ведром. Debian, Ubuntu, Fedora и прочее.

Во фре правильно настроенной — тоже дропается.
UFO just landed and posted this here
Чего-то я не понял, при чем здесь вообще sh…
Разве ls ../../*/../*/*/../../*/*/*/* не подвешивает проц просто потому, что пытается зайти в кучу каталогов подряд и может еще и рекурсивно где-то?.. Тогда с таким же успехом может подвесить проц что-то вроде while true; do true; done

Поясните, плз ))
Разобрался, пролистав оригинальную статью. Это действительно просто тяжелая инструкция, с той разницей, что ее можно выполнить, например, на анонимном ftp
UFO just landed and posted this here
Nokia N900, загрузка проца 97.8%. Длилось секунд 10-20, после чего No such file or directory. Так что не смертельно.
То есть проблема в том, что флаг GLOB_LIMIT не действует при некоторых входных данных, из-за чего происходит высокая нагрузка на CPU и потребление RAM?

То, что уязвимость в функции glob — верю.

Но что показывают примеры с ls ../../*/../*/*/../../*/*/*/*, а также примеры на питоне и php?
Разве ls по умолчанию устанавливает флаг GLOB_LIMIT?

Этот параметр по идее должен устанавливаться как раз только на чем-то типа ftp серверов:

«This option should be set for programs that can be coerced
into a denial of service attack via patterns that expand
to a very large number of matches, such as a long string
of `*/../*/..'.»
(man glob)
Ну а если ls не устанавливает указанный флаг, то его запуск и зависание очевидно ни о чем не говорит.
Sign up to leave a comment.

Articles