История изменений
Исправление fornlr, (текущая версия) :
Как оно вообще так вышло? Небось на каком-нибудь скриптовом языке было написан софт,
Как-как... Очень просто. c++. Обыкновенная детская иньекция
QString exec = m_service.exec();
MacroExpander mx(device);
- mx.expandMacros(exec);
+ mx.expandMacrosShellQuote(exec);
KRun::runCommand(exec, QString(), m_service.icon(), 0);
deleteLater();
Как будто на C++ кто-то помешает тупо загнать строку, зависящую от внешних данных, в вызов какого-нибудь ExecShellCommand без всяких проверок.
Исправление fornlr, :
Как оно вообще так вышло? Небось на каком-нибудь скриптовом языке было написан софт,
Как-как... Очень просто. c++. Обыкновенная детская иньекция
QString exec = m_service.exec();
MacroExpander mx(device);
- mx.expandMacros(exec);
+ mx.expandMacrosShellQuote(exec);
KRun::runCommand(exec, QString(), m_service.icon(), 0);
deleteLater();
Исходная версия fornlr, :
Как оно вообще так вышло? Небось на каком-нибудь скриптовом языке было написан софт,
Как-как... Очень просто. c++. Обыкновенная детская иньекция
// готовим уязвимую строку в str_var
Exec(str_var)