Bug 57448

Summary: SQL Injection через лог Squid
Product: Sisyphus Reporter: Sergey Vlasov <vsu>
Component: squidmillAssignee: manowar <manowar>
Status: ASSIGNED --- QA Contact: qa-sisyphus
Severity: major    
Priority: P5 CC: manowar
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
bad.log — строка из access.log, на которой падает squidmill none

Description Sergey Vlasov 2026-01-09 16:24:40 MSK
Created attachment 20455 [details]
bad.log — строка из access.log, на которой падает squidmill

squidmill-2.7.0-alt2

Текстовые поля из access.log (например, поле ident) вставляются в SQL-запрос без экранирования символа "'", что приводит как минимум к падению squidmill при обработке строки лога, содержащей этот символ в одном из полей (Squid считает, что этот символ допустимо писать в лог без дополнительного экранирования).

$ /usr/sbin/squidmill -d bad.db bad.log
SQLite3 error (1): near "', '": syntax error
*** ERROR -- This object was raised: (sqlite3-err 1 "near \"', '\": syntax error")

Отдельный вопрос — нужно ли вообще обрабатывать строки с TCP_DENIED/407 (в них в поле ident пишется любое значение, присланное клиентом, даже если аутентификация не пройдена, но текущая реализация squidmill просто добавляет эти записи в статистику, учитывая в качестве трафика выданное Squid сообщение об ошибке аутентификации).