Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2023-38891 — Authentifizierte SQL-Injection-Schwachstelle in VTiger Open Source CRM v7.5 | Kitploit
Tools/GitHubGitHub/jselliott/cve-2023-38891
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsDatenbanksicherheit
GitHubjselliott/cve-2023-38891

CVE-2023-38891

Authentifizierte SQL-Injection-Schwachstelle in VTiger Open Source CRM v7.5

Repository anzeigen
11vor 2 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2023-38891

Authentifizierte SQL-Injection-Schwachstelle in VTiger Open Source CRM v7.5

Entdeckt von: Jacob Elliott

07/13/23

Zusammenfassung

Im Reports-Modul von VTiger CRM v7.5.0 gibt es eine unzureichende Überprüfung der ausgewählten Felder für den Bericht, die gespeichert und später beim Ausführen des Berichts als Second-Order-SQL-Injection wieder eingeführt werden. Dadurch kann der Angreifer beliebige Felder aus der Datenbank auslesen, einschließlich Benutzerpasswort-Hashes, Webservice-API-Zugriffsschlüssel und andere sensible Daten.

Proof of Concept

Nach der Authentifizierung am CRM kann der Benutzer zum Reports-Modul navigieren und einen neuen Bericht erstellen.

image1

Aufgrund der Art und Weise, wie die Tabellen verbunden werden, scheint es am besten zu funktionieren, ein Modul mit Datensätzen als primäres Modul auszuwählen. Ich wählte Contacts, das einen Datensatz enthielt.

image1

Als nächstes kann der Benutzer beliebige legitime Felder aus dem primären Modul auswählen und den Berichterstellungsprozess fortsetzen.

image1

Schließlich kann der Benutzer auf die Schaltfläche klicken, um den endgültigen Bericht zu speichern, während er die Verbindungen mit einem Proxy-Tool wie BurpSuite abfängt. Im Parameter selected_fields werden die zuvor ausgewählten Felder im folgenden Format an die Speicherfunktion übergeben:

sql_table:sql_column:label:field_name

An diesem Punkt kann der Benutzer die Werte von sql_table und sql_column auf beliebige Werte ändern, die er aus der Datenbank auslesen möchte. Für dieses POC verwendete ich:

vtiger_users:user_name:Contacts_Salutation:salutationtype

und

vtiger_users:user_password:Contacts_First_Name:firstname

Nach dem Weiterleiten der modifizierten Anfrage wird uns der endgültige Bericht präsentiert, der die gewünschten Spalten aus der Datenbank enthält und so den Benutzernamen und den Passwort-Hash des Admin-Benutzers preisgibt.

image1

Die fehlende ordnungsgemäße Überprüfung wird in modules/Reports/ReportRun.php (Zeilen 394–398) eingeführt. Jeder der angegebenen Spaltennamen wird anhand des ':' aufgeteilt.

root@kitploit:~
$selectedfields = explode(":", $fieldcolname);

Und wenn der Benutzer kein Admin ist, prüft das Skript, ob das Feld in einem Array von zulässigen Feldern enthalten ist, das aus dem ausgewählten primären Modul für den Bericht generiert wird:

root@kitploit:~
!in_array($selectedfields[3], $permitted_fields[$module])

Beachten Sie jedoch die eingegebene Eingabe:

vtiger_users:user_name:Contacts_Salutation:salutationtype

Da die 'zulässigen Felder' gegen das Element an Index 3 im Array geprüft werden, ist das zu prüfende Feld salutationtype im Contacts-Modul, das nicht als sensibel gilt und daher für den Export zugelassen ist. Die Tabelle und Spalte in den ersten beiden Elementen des Arrays unterliegen jedoch keiner solchen Überprüfung, was zur Datenoffenlegung führt.

Behebung

Dieses Problem wurde in diesem Commit behoben, indem die Validierung der ausgewählten Felder geändert wurde, sodass sie gegen die in jedem Modul fest codierten erlaubten Felder geprüft werden.

root@kitploit:~

public function checkPermission(Vtiger_Request $request) {
		parent::checkPermission($request);

		$record = $request->get('record');
		if ($record) {
			$reportModel = Reports_Record_Model::getCleanInstance($record);
			if (!$reportModel->isEditable()) {
				throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
			}
		}

             	$selectedFields = $request->get('selected_fields');
		$groupbyfields = $request->get('groupbyfield');
		$fieldsData = array($selectedFields, $groupbyfields);

		foreach ($fieldsData as $selectedField){
			foreach ($selectedField as $field) {
				list($tablename, $colname, $module_field, $fieldname, $single) = split(":", $field);
				list($module, $fieldName) = split("_", $module_field, 2);
				$moduleModel = Vtiger_Module_Model::getInstance($module);
				$fieldModel = Vtiger_Field_Model::getInstance($fieldname, $moduleModel);

				if (($fieldModel->table !== $tablename) || ($fieldModel->column !== $colname)) {
					throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
				}
			}
		}  
		return true;
	}
Tool herunterladen