Skip to content

Commit 3002a29

Browse files
security: restrict AJAX during upgrade and escape installer config writes (#706)
* Restrict ajax.php to installer actions when INSTALL_BLOCK is missing * Escape installer config values before writing config.php
1 parent 5a98c41 commit 3002a29

2 files changed

Lines changed: 37 additions & 16 deletions

File tree

ajax.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,31 @@
106106
die();
107107
}
108108

109+
$installerActive = (!file_exists('INSTALL_BLOCK'));
110+
if ($installerActive)
111+
{
112+
$module = '';
113+
if (strpos($_REQUEST['f'], ':') !== false)
114+
{
115+
$parameters = explode(':', $_REQUEST['f']);
116+
$module = preg_replace("/[^A-Za-z0-9]/", "", $parameters[0]);
117+
}
118+
119+
if ($module !== 'install')
120+
{
121+
header('Content-type: text/xml');
122+
echo '<?xml version="1.0" encoding="', AJAX_ENCODING, '"?>', "\n";
123+
echo(
124+
"<data>\n" .
125+
" <errorcode>-1</errorcode>\n" .
126+
" <errormessage>Installer is active. Only installer AJAX actions are allowed.</errormessage>\n" .
127+
"</data>\n"
128+
);
129+
130+
die();
131+
}
132+
}
133+
109134
if (strpos($_REQUEST['f'], ':') === false)
110135
{
111136
$function = preg_replace("/[^A-Za-z0-9]/", "", $_REQUEST['f']);

modules/install/ajax/ui.php

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -124,22 +124,22 @@
124124
{
125125
if (isset($_REQUEST['user']) && !empty($_REQUEST['user']))
126126
{
127-
CATSUtility::changeConfigSetting('DATABASE_USER', "'" . $_REQUEST['user'] . "'");
127+
CATSUtility::changeConfigSetting('DATABASE_USER', var_export($_REQUEST['user'], true));
128128
}
129129

130130
if (isset($_REQUEST['pass']) && $_REQUEST['pass'] !== '')
131131
{
132-
CATSUtility::changeConfigSetting('DATABASE_PASS', "'" . $_REQUEST['pass'] . "'");
132+
CATSUtility::changeConfigSetting('DATABASE_PASS', var_export($_REQUEST['pass'], true));
133133
}
134134

135135
if (isset($_REQUEST['host']) && !empty($_REQUEST['host']))
136136
{
137-
CATSUtility::changeConfigSetting('DATABASE_HOST', "'" . $_REQUEST['host'] . "'");
137+
CATSUtility::changeConfigSetting('DATABASE_HOST', var_export($_REQUEST['host'], true));
138138
}
139139

140140
if (isset($_REQUEST['name']) && !empty($_REQUEST['name']))
141141
{
142-
CATSUtility::changeConfigSetting('DATABASE_NAME', "'" . $_REQUEST['name'] . "'");
142+
CATSUtility::changeConfigSetting('DATABASE_NAME', var_export($_REQUEST['name'], true));
143143
}
144144

145145
echo '
@@ -244,11 +244,11 @@
244244
CATSUtility::changeConfigSetting('MAIL_SMTP_AUTH', 'false');
245245
}
246246

247-
CATSUtility::changeConfigSetting('MAIL_SENDMAIL_PATH', '"' . $mailSendmailPath . '"');
248-
CATSUtility::changeConfigSetting('MAIL_SMTP_HOST', '"' . $mailSmtpHost . '"');
247+
CATSUtility::changeConfigSetting('MAIL_SENDMAIL_PATH', var_export($mailSendmailPath, true));
248+
CATSUtility::changeConfigSetting('MAIL_SMTP_HOST', var_export($mailSmtpHost, true));
249249
CATSUtility::changeConfigSetting('MAIL_SMTP_PORT', sprintf('%d', $mailSmtpPort));
250-
CATSUtility::changeConfigSetting('MAIL_SMTP_USER', '"' . $mailSmtpUsername . '"');
251-
CATSUtility::changeConfigSetting('MAIL_SMTP_PASS', '"' . $mailSmtpPassword . '"');
250+
CATSUtility::changeConfigSetting('MAIL_SMTP_USER', var_export($mailSmtpUsername, true));
251+
CATSUtility::changeConfigSetting('MAIL_SMTP_PASS', var_export($mailSmtpPassword, true));
252252

253253
@session_name(CATS_SESSION_NAME);
254254
session_start();
@@ -420,20 +420,16 @@
420420
</script>';
421421

422422
$antiwordPath = $_REQUEST['docExecutable'];
423-
$antiwordWithSlashes = str_replace('\\', '\\\\', $antiwordPath);
424-
CATSUtility::changeConfigSetting('ANTIWORD_PATH', '"' . $antiwordWithSlashes . '"');
423+
CATSUtility::changeConfigSetting('ANTIWORD_PATH', var_export($antiwordPath, true));
425424

426425
$pdftotextPath = $_REQUEST['pdfExecutable'];
427-
$pdftotextWithSlashes = str_replace('\\', '\\\\', $pdftotextPath);
428-
CATSUtility::changeConfigSetting('PDFTOTEXT_PATH', '"' . $pdftotextWithSlashes . '"');
426+
CATSUtility::changeConfigSetting('PDFTOTEXT_PATH', var_export($pdftotextPath, true));
429427

430428
$html2textPath = $_REQUEST['htmlExecutable'];
431-
$html2textWithSlashes = str_replace('\\', '\\\\', $html2textPath);
432-
CATSUtility::changeConfigSetting('HTML2TEXT_PATH', '"' . $html2textWithSlashes . '"');
429+
CATSUtility::changeConfigSetting('HTML2TEXT_PATH', var_export($html2textPath, true));
433430

434431
$unrtfPath = $_REQUEST['rtfExecutable'];
435-
$unrtfWithSlashes = str_replace('\\', '\\\\', $unrtfPath);
436-
CATSUtility::changeConfigSetting('UNRTF_PATH', '"' . $unrtfWithSlashes . '"');
432+
CATSUtility::changeConfigSetting('UNRTF_PATH', var_export($unrtfPath, true));
437433

438434
break;
439435

0 commit comments

Comments
 (0)