---
id: "CVE-2026-27892"
kind: "vulnerability"
aliases: ["CVE-2026-27892", "GHSA-q7f2-rv22-2xgr"]
title: "FacturaScripts Vulnerable to Unstripped Image Metadata (EXIF) Leakage via Library Module File Upload/Download"
severity: "medium"
cvss: 6.5
epss: 0.00227
exploited: false
status: "open"
category: "package"
products: [{"name": "facturascripts/facturascripts", "fixed": ["2026"], "affected": "< 2026", "ecosystem": "composer"}]
ecosystems: ["composer"]
tags: ["cwe-200", "cwe-212", "facturascripts", "package", "php", "self-hosted"]
not_affected_if: ["library-unused", "single-user"]
published_at: "2026-05-07T19:33:48+00:00"
first_seen_at: "2026-10-30T16:54:37+00:00"
updated_at: "2026-10-30T16:56:41+00:00"
sources: [{"source": "ghsa", "url": "https://github.com/advisories/GHSA-q7f2-rv22-2xgr", "first_seen_at": "2026-10-30T16:54:37+00:00"}, {"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-27892", "first_seen_at": "2026-10-30T17:01:26+00:00"}]
---

# FacturaScripts Vulnerable to Unstripped Image Metadata (EXIF) Leakage via Library Module File Upload/Download

FacturaScripts keeps EXIF and other embedded metadata in images uploaded to the Library module and serves them unchanged. Any authenticated user who downloads such an image can read the uploader's GPS location, device details, timestamps and comments.

_Summary, check and fix written by a model from the sources; labelled as such._

## Affected

- composer:facturascripts/facturascripts affected < 2026 fixed 2026

## How to check

- Check the installed FacturaScripts version in `composer.json` or the lock file for `facturascripts/facturascripts`; versions below `2026` are affected.
- Upload a JPEG with GPS EXIF data to the Library, download it as another user, and inspect it with `exiftool <file>`; surviving GPS fields confirm the exposure.

## Fix

- `facturascripts/facturascripts` fixed in `2026`

## Timeline

- 2026-10-30T16:54:37+00:00 ghsa https://github.com/advisories/GHSA-q7f2-rv22-2xgr
- 2026-10-30T17:01:26+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-27892

## Documents

- [advisory] Maintainer's advisory: api.github.com https://api.github.com/repos/NeoRazorX/facturascripts/security-advisories/GHSA-q7f2-rv22-2xgr
- [advisory] Maintainer's advisory: github.com https://github.com/NeoRazorX/facturascripts/security/advisories/GHSA-q7f2-rv22-2xgr
- [fix] Patch: github.com https://github.com/NeoRazorX/facturascripts/commit/b0725147a61a9a377b7180589af33ff52b4751e2

## From the sources

## Summary

**Fectura Scripts** is an open-source ERP application, a **sensitive information disclosure vulnerability** was identified in the **Library** module's image upload and download pipeline. The application fails to strip EXIF and other embedded metadata from user-uploaded image files before storing them and serving them for download. As a result, any authenticated user who downloads an image from the Library can extract the original uploader's **GPS coordinates, device information, timestamps, embedded comments/notes, thumbnail previews, and other personally identifiable information (PII)** preserved in the image metadata.

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.**

---

## Affected Functionality Overview

Fectura Scripts exposes image upload capabilities across several modules (e.g., email composition, profile settings, etc.). During testing, the **Library section** was identified as the only module that provides:

- **Full image upload** (unrestricted image types observed)
- **Persistent storage** of uploaded files
- **Direct download** capability for any authenticated user with access
- **No server-side metadata sanitization** at any point in the pipeline (upload, storage, or delivery)

Other modules (e.g., email attachments) were also tested but either did not render images or had limited upload/download exposure.

---

## Technical Background

### What Is EXIF/Image Metadata?

Most modern image formats (JPEG, TIFF, PNG with ancillary chunks, HEIC, WebP with XMP) embed metadata automatically at creation time. This metadata can include:

| Metadata Category | Example Fields | Privacy Risk |
|---|---|---|
| **GPS / Geolocation** | GPSLatitude, GPSLongitude, GPSAltitude, GPSTimestamp | **Critical** — reveals exact physical location |
| **Device Information** | Make, Model, Software, LensModel | Medium — device fingerprinting |
| **Timestamps** | DateTimeOriginal, CreateDate, ModifyDate | Medium — behavioral profiling |
| **User Comments** | UserComment, ImageDescription, XPComment, XPAuthor | **High** — may contain names, notes, PII |
| **Thumbnails** | ThumbnailImage (embedded JPEG preview) | **High** — may preserve original uncropped image |
| **Serial Numbers** | BodySerialNumber, LensSerialNumber, InternalSerialNumber | Medium — unique device tracking |
| **Network/Software** | HostComputer, Software, ProcessingSoftware | Low–Medium — infrastructure disclosure |
| **XMP / IPTC** | Creator, Rights, Description, Keywords | Medium — organizational/authorship leakage |

### Why This Matters in an ERP Context

ERP platforms are used by businesses with multiple employees, contractors, clients, and sometimes external partners accessing shared resources. The **Library** module is inherently a collaborative, shared-access feature. Any image uploaded by one party is downloadable by many others — creating a **one-to-many PII exposure vector**.

---

## Step-by-Step Reproduction

### Prerequisites

- A valid user account with access to the **Library** module (tested with Admin role; lower-privilege roles should also be tested)
- A test image file containing rich EXIF/metadata (see Step 1)
- An EXIF analysis tool: `exiftool` (CLI), or any online EXIF viewer

---

### Step 1: Prepare a Metadata-Rich Test Image

Create or obtain a JPEG image with embedded GPS and descriptive metadata. You can inject test metadata using `exiftool`:

```bash
exiftool \
  -GPSLatitude="48.8566" \
  -GPSLatitudeRef="N" \
  -GPSLongitude="2.3522" \
  -GPSLongitudeRef="E" \
  -GPSAltitude="35" \
  -UserComment="Confidential: Taken at employee home address" \
  -XPAuthor="John Doe" \
  -Make="Apple" \
  -Model="iPhone 15 Pro Max" \
  -DateTimeOriginal="2025:01:15 09:30:00" \
  test_image.jpg
```

Verify metadata is present:

```bash
exiftool test_image.jpg
```

Expected output should show all injected fields including GPS coordinates resolving to **Paris, France (48.8566°N, 2.3522°E)**.

---

### Step 2: Log in to Fectura Scripts

1. Navigate to the Fectura Scripts login page.
2. Authenticate with valid credentials.
3. Confirm access to the application dashboard.

---

### Step 3: Navigate to the Library Section

1. From the main navigation/sidebar, click on **"Library"** (or equivalent menu entry).
2. Confirm the Library module loads and displays existing files/images (if any).

---

### Step 4: Upload the Test Image

1. Click the **"Upload"** button/action within the Library interface.
2. Select the prepared `test_image.jpg` file.
3. Complete the upload process (fill any required fields such as title/description if prompted).
4. Confirm the image appears in the Library listing.

---

### Step 5: Download the Image (as the Same or Different User)

1. Locate the uploaded image in the Library.
2. Click the **"Download"** button/link (or right-click → Save As on the rendered image, depending on UI).
3. Save the file locally as `downloaded_image.jpg`.

> **Note:** For stronger proof of impact, perform this step logged in as a **different user account** with Library access, demonstrating cross-user information leakage.

---

### Step 6: Extract and Analyze Metadata from the Downloaded File

Run `exiftool` on the downloaded file:

```bash
exiftool downloaded_image.jpg
```

**Observed Result (Vulnerable):**

```
GPS Latitude                    : 48 deg 51' 23.76" N
GPS Longitude                   : 2 deg 21' 7.92" E
GPS Altitude                    : 35 m
GPS Position                    : 48.8566°N, 2.3522°E
User Comment                    : Confidential: Taken at employee home address
XP Author                       : John Doe
Make                            : Apple
Model                           : iPhone 15 Pro Max
Date/Time Original              : 2025:01:15 09:30:00
...
[ALL original metadata preserved in full]
```

**Expected Result (Secure):**

All EXIF, XMP, IPTC, GPS, and comment fields should be **stripped or neutralized** before storage or at download time. Only essential image rendering data should remain.

---

### Step 7: Confirm GPS Resolution to Physical Location

Take the extracted GPS coordinates and resolve them:

```
https://www.google.com/maps?q=48.8566,2.3522
```

This confirms the metadata resolves to a **precise, real-world physical location** — demonstrating the severity of the leak.

---

## Root Cause Analysis

The application's image upload handler in the Library module **stores the uploaded file byte-for-byte without any server-side processing to remove metadata**. The download handler then serves the identical file. At no point in the pipeline is any of the following performed:

1. **EXIF stripping** (e.g., via libraries like `Intervention Image`, `Imagick::stripImage()`, Python Pillow's `.save()` without EXIF, or `jpegtran -copy none`)
2. **Re-encoding / reprocessing** of the image (which would naturally discard non-image data)
3. **Selective metadata whitelisting** (preserving only color profile / orientation data)
4. **Content-Disposition header enforcement** to prevent inline rendering with metadata intact

This is a **design-level omission** rather than a bypassable control — there is simply no metadata handling logic present.

---

## Impact Assessment

### Direct Impacts

| Impact | Description | Severity |
|---|---|---|
| **Geolocation Disclosure** | GPS coordinates in uploaded photos can reveal home addresses, office locations, client sites, travel patterns of employees | **High** |
| **PII Leakage** | Author names, comments, device owner names embedded in metadata expose personal identity | **High** |
| **Device Fingerprinting** | Camera make/model, serial numbers, and software versions enable tracking and targeting of specific individuals or devices | **Medium** |
| **Behavioral Profiling** | Timestamps and sequential GPS data across multiple uploads can reconstruct an individu

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
