objects/aVideoEncoderReceiveImage.json.php allowed an authenticated uploader to fetch attacker-controlled same-origin /videos/... URLs, bypass traversal scrubbing, and expose server-local files through the GIF poster storage path.
The vulnerable GIF branch could be abused to read local files such as /etc/passwd or application source files and republish those bytes through a normal public GIF media URL.
The vulnerable chain was:
objects/aVideoEncoderReceiveImage.json.php accepted attacker-controlled downloadURL_gifimagestr_replace('../', '', ...), which was bypassable with overlapping input such as ....///videos/... URLs were acceptedurl_get_contents() and try_get_contents_from_local() resolved the request into a local filesystem readThis made the GIF poster path a local file disclosure primitive with public retrieval.
POST /objects/aVideoEncoderReceiveImage.json.php
downloadURL_gifimage=https://localhost/videos/....//....//....//....//....//....//etc/passwd
GET /objects/videos.json.php?showAll=1
videosURL.gif.url./etc/passwd, byte-for-byte.An authenticated uploader can read server-local files and republish them through a public GIF media URL by supplying a crafted same-origin /videos/... path to downloadURL_gifimage. Because traversal scrubbing was bypassable and the fetched bytes were written to the GIF destination without effective invalid-image cleanup, successful exploitation allows disclosure of files such as /etc/passwd, readable application source code, or deployment-specific configuration accessible to the application.
/videos/... fetches to resolve into local file readsrealpath() and strict base-directory allowlists{
"github_reviewed_at": "2026-04-08T00:08:44Z",
"severity": "HIGH",
"cwe_ids": [
"CWE-22"
],
"nvd_published_at": "2026-04-07T20:16:31Z",
"github_reviewed": true
}