LINUX.ORG.RU

История изменений

Исправление 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)