Похоже, это была проблема, существовавшая в LShell 0.9.15, ограниченной оболочке, реализованной на python.
Уязвимая функция называлась check_path()
, которая использовалась для проверки того, разрешен ли пользователю доступ к заданному пути в командной строке.
Проблема заключалась в том, что эта функция использовала eval()
как средство для удаления кавычек из командной строки, и это также с радостью выполнило бы любое допустимое выражение Python.
for item in line: # remove potential quotes try: item = eval(item) except: pass
Позже эта проблема была устранена в следующем коммите путем замены вызова eval()
подстановкой регулярного выражения:https://github.com/ghantoos/lshell/commit/4e05ac2e9c12142beed0e0fa16331ee0fd7dbd42#diff-edb4dda47bc5b086988a93df2615df6f
ИМХО это ошибка в документации. Раздел Использование Константных регулярных выражений (6.1.2.1)предшествует разделу Строковые функции (9.1.3 ), который содержит актуальную gensub
документацию. Глядя на источник:
@cindexgawkfunc{gensub}
@cindexawkfunc{sub}
@cindexawkfunc{gsub}
Constant regular expressions are also used as the first argument for
the @code{gensub()}, @code{sub()}, and @code{gsub()} functions, as the
second argument of the @code{match()} function,
Это первое появление @cindexgawkfunc{gensub}
, второе — это фактическая документация по функциям . Они должны были использовать другой ярлык для первого экземпляра.