Чтобы успокоить несколько, я не нашел ошибку, наблюдая за эксплуатациями, у меня есть
Нет причин полагать, что это было эксплуатировано перед раскрытием
(Хотя конечно, я не могу его исключить). Я не нашел это
Глядя на Bash
код либо.
Я не могу сказать, что в то время я помню, как именно мой поезд мыслей в то время.
Это более или менее пришло из некоторого отражения на некоторых поведении Некоторые программное обеспечение я нахожу опасно (поведение, а не програмное обеспечение). Такое поведение, которое заставляет вас думать: не звучит как хорошая идея .
В этом случае я отражал общую конфигурацию
SSH, что позволяет пропускать переменные среды нецизированы из
Клиент предоставил свое имя начинается с LC_
. Идея такая
что люди могут продолжать использовать свой собственный язык, когда SSH
в
другие машины. Хорошая идея, пока вы не начнете рассмотреть
Насколько сложна обработка локализации, особенно когда UTF-8
принес в уравнение (и видеть, насколько плохо это обрабатывается
много приложений).
Вернувшись в июле 2014 года, я уже сообщил о уязвимости в
Обработка локализации Glibc, которая в сочетании с этим SSHD
config, а Два других Опасное поведение Bash
Shell
Допускается (аутентифицированные) злоумышленники, чтобы взломать серверы Git
при условии, что они смогли загружать файлы там и Bash
Используется в качестве входа в систему Shell из пользователя GIT Unix (CVE-2014-0475).
Я думал, что это, вероятно, была плохой идеей использовать Bash
как вход в систему
Shell из пользователей, предлагающих услуги по SSH, учитывая, что это довольно
Комплексная оболочка (когда все, что вам нужно, просто разбирается очень простая командная строка) и унаследовала большинство ошибок KSH.
Поскольку я уже определил несколько проблем с Bash
используется в этом контексте (интерпретировать SSH Forcecommand
, я был
Удивительно, если бы там было потенциально больше.
ACCECTENV LC _ *
позволяет любую переменную, имя которой начинается
С LC_
и у меня была расплывная воспоминания, которую экспортировал Bash
Функции (A опасно , хотя и на момент полезной функции) были
используя переменные среды, имя которого было что-то вроде
Myфункция ()
и было интересно, если бы не было чего-то
Интересно смотреть там.
Я собирался отклонить его на том основании, что худшее
Может ли сделать было бы переопределить команду под названием lc_something
что не может быть проблемой, так как они не существуют
Команды, но тогда я начал удивляться, как Bash
импортировал те переменные среды.
Что если переменные были вызваны LC_FOO; Echo Test; f ()
Например? Поэтому я решил посмотреть.
A:
$ env -i bash -c 'zzz() { :;}; export -f zzz; env'
[...]
zzz=() { :
}
показал, что моя воспоминания ошибалась в том, что переменные
не были названы Myфункция ()
, но MSFunction
(и это
значение , которое начинается с ()
).
и быстрый тест:
$ env 'true;echo test; f=() { :;}' bash -c :
test
bash: error importing function definition for `true;echo test; f'
подтвердил мое подозрение, что имена переменной не было дезинфицировано, И код был оценен при запуске .
Хуже, намного хуже, значение также не было дезинфицировано:
$ env 'foo=() { :;}; echo test' bash -c :
test
, что означало, что любой переменной среды может быть вектором.
Это когда я понял, что степень проблемы, подтвердила, что это было
Эксплуатация также по адресу http ( http_xxx
/ QueryString
... Env vars), другие, такие как услуги по обработке почты, позже DHCP (и, вероятно, длинный список) и
сообщил об этом (тщательно).
Explanation[1128447]:
:set novb
file[1128866]: файл, который содержит вы выводимый вами выше
===========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
0x2 ...00 12 34 56 78 9a ...... Intel(R) 82566DM Gigabit Network Connection
===========================================================================
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 123.45.67.1 123.45.67.137 10
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
234.254.0.0 255.255.0.0 123.45.67.137 123.45.67.137 20
123.45.67.0 255.255.255.0 123.45.67.137 123.45.67.137 10
123.45.67.137 255.255.255.255 127.0.0.1 127.0.0.1 10
123.45.255.255 255.255.255.255 123.45.67.137 123.45.67.137 10
224.0.0.0 240.0.0.0 123.45.67.137 123.45.67.137 10
255.255.255.255 255.255.255.255 123.45.67.137 123.45.67.137 1
Default Gateway: 123.45.67.1
===========================================================================
Persistent Routes:
None
grep -oP "Event 100" file[1128868]: Поиск "События 100"
sed -ne 's/<\/\?AZ>///g' -e '7,9p' файл[1128870]:
sed -ne 's/<\/\?AZ>///g' -e '7,9p' файл[1128870]: Если строка найдена, удалите теги [1128871]
awk 'BEGIN {RS=""; FS="\n";}[1128876]: установите разделитель полей awk на newline
{printf "%s %s %s %s %s\n", $3, $2, $4, $1}[1128878]: и выведите вывод в нужном порядке
Output[1128459] (если строка найдена):
If string is not found there is no output. [1128030]
C:\Windows\System32\runas.exe /storecred /user:Domain\UserName "mmc %windir%\system32\dsa.msc"
Он последовательно собирает вещи, которые выглядят как время, дата или тег ([12345]), и если возникает строка типа "Событие 100 произошло", то выводится текущее содержимое переменных. Это и есть нужный вывод?[1128020].