Bug 43636

Summary: Неверная интерпретация аргументов EXECVE
Product: Sisyphus Reporter: manowar <manowar>
Component: auditd-plugin-clickhouseAssignee: manowar <manowar>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: manowar, rider
Version: unstable   
Hardware: x86_64   
OS: Linux   

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