Skip to content

Commit f981d51

Browse files
committed
Imap - update user_identity getIdentityFromSql
to use parameters to prevent SQL Injection CVE-2025-8264 as reported by Snyk and XBOW
1 parent f259255 commit f981d51

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

src/backend/imap/user_identity.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,9 +208,14 @@ function getIdentityFromSql($username, $domain, $identity, $encode = true) {
208208
$dbh = new PDO(IMAP_FROM_SQL_DSN, IMAP_FROM_SQL_USER, IMAP_FROM_SQL_PASSWORD, unserialize(IMAP_FROM_SQL_OPTIONS));
209209
ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendIMAP->getIdentityFromSql() - Connected to SQL Database"));
210210

211-
$sql = str_replace('#username', $username, str_replace('#domain', $domain, IMAP_FROM_SQL_QUERY));
211+
//replace config placeholdes with parameter placeholders
212+
$sql = str_replace("'#username'", ":username", str_replace("'#domain'", ":domain", str_replace("'#username@#domain'", ":usernameatdomain", IMAP_FROM_SQL_QUERY)));
213+
$usernameatdomain = $username . '@' . $domain;
212214
ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendIMAP->getIdentityFromSql() - Searching From with filter: %s", $sql));
213215
$sth = $dbh->prepare($sql);
216+
if(mb_strpos($sql, ':username') !== false) $sth->bindValue(':username', $username, PDO::PARAM_STR);
217+
if(mb_strpos($sql, ':domain') !== false) $sth->bindValue(':domain', $domain, PDO::PARAM_STR);
218+
if(mb_strpos($sql, ':usernameatdomain') !== false) $sth->bindValue(':usernameatdomain', $usernameatdomain, PDO::PARAM_STR);
214219
$sth->execute();
215220
$record = $sth->fetch(PDO::FETCH_ASSOC);
216221
if ($record) {

0 commit comments

Comments
 (0)