Bug 43636 - Неверная интерпретация аргументов EXECVE
Summary: Неверная интерпретация аргументов EXECVE
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: auditd-plugin-clickhouse (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: manowar@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-08-26 16:01 MSK by manowar@altlinux.org
Modified: 2022-11-21 10:04 MSK (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description manowar@altlinux.org 2022-08-26 16:01:13 MSK
При текущем режиме интерпретации аргументов записей типа EXECVE в ряде случаев теряется информация.

# auditctl -a always,exit -F arch=b64 -F uid=500 -S execve

Заходим под пользователем (uid=500) и даём хитрую команду:

$ ls abc "$(printf '\\037+\037')"

Затем смотрим, что получилось в аудите:

# grep 'a0="ls"' /var/log/audit/audit.log
type=EXECVE msg=audit(1661517719.472:454): argc=4 a0="ls" a1="--color=auto" a2="abc" a3=5C3033372B1F

В a3 коды символов, которые можно раскодировать в исходную строку.

Та же самая запись в базе выглядит так:

Row 1:
──────
record_time:   2022-08-26 12:41:59
record_serial: 454
type:          EXECVE
uid_IntValue:  ᴺᵁᴸᴸ
arg_a_Value:   ['ls','--color=auto','abc','\\037+\\037']

Как видно, аргумент уже раскодирован. Но эту строку нельзя интерпретировать так, чтобы только одна из кодовых последовательностей дала символ с кодом 037, а вторая осталась бы в виде цифр, поскольку обе последовательности теперь идентичны.

P.S. Я понимаю, что пример экзотический. Однако, информация действительно теряется.
Comment 1 manowar@altlinux.org 2022-08-26 16:02:42 MSK
P.P.S. В libauparse есть режим AUPARSE_ESC_SHELL, который позволяет избежать указанной ошибки. Но не знаю, можно ли включить его для режима плагина.
Comment 2 manowar@altlinux.org 2022-11-21 10:04:17 MSK
Там всё исправлено уже. Изаиняюсь, что не закрыл сразу.

20221102.1.1-alt1