Почитал внимательно вот это https://github.com/LucasPDiniz/CVE-2023-38408 и особенно вот это https://www.vicarius.io/vsociety/posts/exploring-opensshs-agent-forwarding-rce-cve-2023-38408
Остались "глупые вопросы" у меня (да, не ругайтесь, я всё это шеллкоды и asm забыл почти более 15 лет прошло, сейчас в другой теме) :
1. Правильно ли я понимаю, что это не прямая эксплуатация, а по сути эдакий privesc?
Ну то есть к SSH серверу у атакующего для эксплуатации доступ быть уже должен (непривилегированный), а "насрав" в юникс-сокет SSH сессии другого пользователя шеллкодом атакер получает право распоряжаться его ключами (из его проброшенного ssh-agent) и "стать другим юзером" с большими привилегиями - я правильно суть понимаю?
2. Судя по документации "ssh-add -s" (которым грузят .so библиотеки "как-то" см. статьи по ссылкам) это:
Интересно каким же образом срабатывает загрузка .so вот такая:
а? Этот момент не понятен. Может кто-то пояснить пожалуйста?
3. А вот для чего .so грузить уже понятно - чтобы стек стал выполняемый (ряд библиотек этого требуют, после выгрузки оставляют страницы памяти executable) - иначе шеллкод не выполнится, он на переполнении стека же основан иначе откуда там аж "\x90" * 10000 это 10k NOP см. в "perl -e"
Но не понятно почему их надо столько загрузить см. это:
Вот эта часть особенно не понятна.
Мне это чисто технически интересно, даже не в плане взлома. Буду очень благодарен за любые подсказки.
Остались "глупые вопросы" у меня (да, не ругайтесь, я всё это шеллкоды и asm забыл почти более 15 лет прошло, сейчас в другой теме) :
1. Правильно ли я понимаю, что это не прямая эксплуатация, а по сути эдакий privesc?
Ну то есть к SSH серверу у атакующего для эксплуатации доступ быть уже должен (непривилегированный), а "насрав" в юникс-сокет SSH сессии другого пользователя шеллкодом атакер получает право распоряжаться его ключами (из его проброшенного ssh-agent) и "стать другим юзером" с большими привилегиями - я правильно суть понимаю?
2. Судя по документации "ssh-add -s" (которым грузят .so библиотеки "как-то" см. статьи по ссылкам) это:
Код:
-s pkcs11
Add keys provided by the PKCS#11 shared library pkcs11. Certificate files may optionally be listed as command‐line arguments. If these are present, then they will be loaded into the agent using any corresponding
private keys loaded from the PKCS#11 token.
Код:
$ ssh-add -s /usr/lib/x86_64-linux-gnu/libKF5SonnetUi.so.5.92.0
Enter passphrase for PKCS#11:
Could not add card "/usr/lib/x86_64-linux-gnu/libKF5SonnetUi.so.5.92.0": agent refused operation
3. А вот для чего .so грузить уже понятно - чтобы стек стал выполняемый (ряд библиотек этого требуют, после выгрузки оставляют страницы памяти executable) - иначе шеллкод не выполнится, он на переполнении стека же основан иначе откуда там аж "\x90" * 10000 это 10k NOP см. в "perl -e"
Но не понятно почему их надо столько загрузить см. это:
Код:
# Remotely alter the mmap layout of ssh-pkcs11-helper:
$ ssh-add -s /usr/lib/pulse-15.0+dfsg1/modules/module-remap-sink.so
# Remotely alter the mmap layout of ssh-pkcs11-helper (again), and replace the unmapped SIGBUS handler's code with another piece of code (a useful gadget) from another shared library:
$ ssh-add -s /usr/lib/pulse-15.0+dfsg1/modules/module-http-protocol-unix.so
$ ssh-add -s /usr/lib/x86_64-linux-gnu/sane/libsane-hp.so.1.0.32
$ ssh-add -s /usr/lib/libreoffice/program/libindex_data.so
$ ssh-add -s /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstaudiorate.so
$ ssh-add -s /usr/lib/libreoffice/program/libscriptframe.so
$ ssh-add -s /usr/lib/x86_64-linux-gnu/libisccc-9.16.15-Ubuntu.so
$ ssh-add -s /usr/lib/x86_64-linux-gnu/libxkbregistry.so.0.0.0
# Remotely raise a SIGBUS in ssh-pkcs11-helper:
$ ssh-add -s /usr/lib/debug/.build-id/15/c0bee6bcb06fbf381d0e0e6c52f71e1d1bd694.debug
Мне это чисто технически интересно, даже не в плане взлома. Буду очень благодарен за любые подсказки.