эти ошибки tcl указывают на небезопасный код? - PullRequest
3 голосов
/ 23 апреля 2011

Я делаю тест безопасности на системе, имеющей встроенный интерпретатор TCL.Система получает входные данные из Интернета (HTTP), анализирует их и передает настраиваемые сценарии TCL.Во время нечеткого теста (отправка двоичного мусора в заголовках HTTP) я заметил следующие ошибки в журнале:

Ошибка TCL: элемент списка в кавычках с последующим "{} x" вместо пробела при выполнении"foreach header [XXXXX] {}"

или

Ошибка TCL: несоответствующая открытая кавычка в списке при выполнении "foreach header [XXXXX] {}"

Здесь XXXXX - это команда, возвращающая массив заголовков HTTP, проанализированных системой.Извините, что запутываете настоящую команду, надеюсь, вы понимаете, что я не хочу обнародовать слишком много деталей до того, как поставщик узнает о проблеме (если она окажется проблемой).

Создание кода TCLошибка очень проста:

foreach header [XXXXX] {}

Насколько я могу судить, HTTP-разбор выполняется вне TCL, а проанализированные значения становятся доступнымив TCL с помощью пользовательских команд (возможно, реализованных как расширение TCL).

Итак, мои вопросы:

  1. Являются ли эти контрольные признаки ошибок безопасности системы,например, недостаточная проверка ввода пользователя?

  2. Если да, можно ли использовать это условие для выполнения произвольных операторов TCL путем отправки специально созданного системного запроса, своего рода атака с внедрением кода ?

  3. Есть ли какой-нибудь документ "Практики кодирования Secure TCL"?Я не смог найти ни одного.

1 Ответ

7 голосов
/ 23 апреля 2011

Вы спрашивали об этом на comp.lang.tcl , где я ответил:

1) Являются ли эти ошибки контрольными признаками проблем безопасности с система, например, недостаточная проверка ввода пользователя?

Они указывают на проблемы в коде синтаксического анализа. Я предполагаю, что код предполагает, что он может предполагать, что заголовок является правильно сформированным Список Tcl, который вы считаете совершенно небезопасным. Санитарная обработка используйте что-то вроде этого:

set listOfWords [regexp -all -inline {\S+} $someString] 

Полученный набор слов гарантированно будет корректным список для произвольной входной строки.

2) Если да, можно ли использовать это условие для выполнения произвольного TCL заявления по отправке в систему специально созданного запроса, своего рода http://en.wikipedia.org/wiki/Code_injection атака?

Скорее всего, нет, если только вы потом не обработаете этот список как код.

3) Существуют ли какие-либо документы "Практика безопасного кодирования TCL"? Любой другой источник информации о том, как безопасно обрабатывать ненадежные данные?

Самый простой способ - выполнить синтаксический анализ в Safe Interpreter:

interp create -safe parsingInterp 
parsingInterp eval { make the procedures } 
parsingInterp eval [list doTheParse $stringToParse] 

Обратите внимание, что мы также гарантируем, что построенные списки (например, из list, а также многие другие команды) eval-safe. То есть:

eval [list $a $b $c] 

равно точно так же, как:

$a $b $c 

Это верно, что бы ни было в этих переменных.

...