Lack of data validation - Path Traversal In wwbn/avideo

Description

WWBN AVideo's GIF poster fetch bypasses traversal scrubbing and exposes local files through public media URLs

Summary

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.

Details

The vulnerable chain was:

    objects/aVideoEncoderReceiveImage.json.php accepted attacker-controlled downloadURL_gifimage

    traversal scrubbing used str_replace('../', '', ...), which was bypassable with overlapping input such as ....//

    same-origin /videos/... URLs were accepted

    url_get_contents() and try_get_contents_from_local() resolved the request into a local filesystem read

    the fetched bytes were written into the GIF destination

    invalid GIF cleanup used the wrong variable, so the non-image payload remained on disk

This made the GIF poster path a local file disclosure primitive with public retrieval.

Proof of concept

    Log in as an uploader and create an owned video row through the normal encoder flow.

    Send:

POST /objects/aVideoEncoderReceiveImage.json.php
downloadURL_gifimage=https://localhost/videos/....//....//....//....//....//....//etc/passwd

    Query:

GET /objects/videos.json.php?showAll=1

    Recover the generated GIF URL from videosURL.gif.url.

    Download that GIF URL.

    Observe that the body matches the target local file, such as /etc/passwd, byte-for-byte.

Impact

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.

Recommended fix

    Reject any remote image URL whose decoded path contains traversal markers

    Do not allow attacker-controlled same-origin /videos/... fetches to resolve into local file reads

    Constrain any local shortcut path handling with realpath() and strict base-directory allowlists

    Validate GIF content before saving it into public media storage

    Ensure invalid-image cleanup checks the correct destination path

Mitigation

Update Impact

Minimal update. May introduce new vulnerabilities or breaking changes.

Ecosystem
Package
Affected version
Patched versions