Headline
CVE-2022-24851: #170 fixed security issues in profile editor and PDF editor · LDAPAccountManager/lam@3c6f09a
LDAP Account Manager (LAM) is an open source web frontend for managing entries stored in an LDAP directory. The profile editor tool has an edit profile functionality, the parameters on this page are not properly sanitized and hence leads to stored XSS attacks. An authenticated user can store XSS payloads in the profiles, which gets triggered when any other user try to access the edit profile page. The pdf editor tool has an edit pdf profile functionality, the logoFile parameter in it is not properly sanitized and an user can enter relative paths like …/…/…/…/…/…/…/…/…/…/…/…/…/usr/share/icons/hicolor/48x48/apps/gvim.png via tools like burpsuite. Later when a pdf is exported using the edited profile the pdf icon has the image on that path(if image is present). Both issues require an attacker to be able to login to LAM admin interface. The issue is fixed in version 7.9.1.
@@ -13,6 +13,7 @@ use \htmlResponsiveInputTextarea; use \htmlHiddenInput; use \htmlSpacer; use LAM\PDF\PdfLogo; use LAM\PDF\PdfStructurePersistenceManager; use LAM\PDF\PDFTextSection; use LAM\PDF\PDFEntrySection; @@ -23,7 +24,7 @@ /* This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/) Copyright © 2003 - 2006 Michael Duergner 2007 - 2021 Roland Gruber 2007 - 2022 Roland Gruber This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -132,8 +133,9 @@ } }
$logoFiles = $pdfStructurePersistenceManager->getPdfLogos($_SESSION[‘config’]->getName(), true); if (!empty($_POST[‘form_submit’])) { updateBasicSettings($_SESSION[‘currentPDFStructure’]); updateBasicSettings($_SESSION[‘currentPDFStructure’], $logoFiles); updateSectionTitles($_SESSION[‘currentPDFStructure’]); addSection($_SESSION[‘currentPDFStructure’]); addSectionEntry($_SESSION[‘currentPDFStructure’]); @@ -228,7 +230,6 @@ // headline $headline = $_SESSION[‘currentPDFStructure’]->getTitle(); // logo $logoFiles = $pdfStructurePersistenceManager->getPdfLogos($_SESSION[‘config’]->getName(), true); $logos = array(_(‘No logo’) => ‘none’); foreach($logoFiles as $logoFile) { $logos[$logoFile->getName() . ' (' . $logoFile->getWidth() . ' x ' . $logoFile->getHeight() . ")"] = $logoFile->getName(); @@ -516,16 +517,28 @@ function translateFieldIDToName($id, $scope, $availablePDFFields) { /** * Updates basic settings such as logo and head line. * * @param PDFStructure $structure * @param PDFStructure $structure PDF structure * @param PdfLogo[] $logoFiles logos */ function updateBasicSettings(PDFStructure &$structure) { function updateBasicSettings(PDFStructure &$structure, array $logoFiles) { // set headline if (isset($_POST[‘headline’])) { $structure->setTitle(str_replace('<’, '’, str_replace('>’, '’, $_POST[‘headline’]))); } // set logo if (isset($_POST[‘logoFile’])) { $structure->setLogo($_POST[‘logoFile’]); $fileName = $_POST[‘logoFile’]; $found = false; foreach ($logoFiles as $logoFile) { if ($logoFile->getName() === $fileName) { $found = true; } } if (!$found) { logNewMessage(LOG_ERR, 'Invalid PDF logo file: ' . $fileName); return; } $structure->setLogo($fileName); } // set folding marks if (isset($_POST[‘foldingmarks’])) {