Skip to content

@jmondi/url-to-png enables capture screenshot of localhost web services (unauthenticated pages)

Low severity GitHub Reviewed Published Jul 13, 2024 in jasonraimondi/url-to-png • Updated Aug 4, 2024

Package

npm @jmondi/url-to-png (npm)

Affected versions

< 2.1.2

Patched versions

2.1.2

Description

Summary

The maintainer been contemplating whether FTP or other protocols could serve as useful functionalities, but there may not be a practical reason for it since we are utilizing headless Chrome to capture screenshots. The argument is based on the assumption that this package can function as a service.

The package includes an ALLOW_LIST where the host can specify which services the user is permitted to capture screenshots of. By default, capturing screenshots of web services running on localhost, 127.0.0.1, or the [::] is allowed.

The maintainer is of the opinion that the package should also have a blacklist due to a potential vulnerability (or rather design oversight). If someone hosts this on a server, users could then capture screenshots of other web services running locally.

Unless this is strictly for web pages. Something similar here: follow-redirects/follow-redirects#235 (localhost is intended for end users or hosts to deny, and the package is for HTTP/HTTPS.)

This is marked as a LOW since the maintainer is not sure if this is a vulnerability, but it's still best to highlight it. :)

PoC

Have a service like so running locally:

const http = require("http")

const server = http.createServer((req, res) => {
  console.log("Received headers:", req.headers)
  res.writeHead(200, { "Content-Type": "text/plain" })
  res.end("Something private! But Hello from Server 2 :)")
})

server.listen(3001, () => {
  console.log("Server two running on http://localhost:3001")
})

Run the package in dev mode, pnpm dev. Feed these URLs:

http://localhost:3089/?url=http://[::]:3001&width=4000
http://localhost:3089/?url=http://localhost:3001&width=4000
http://localhost:3089/?url=http://127.0.01:3001&width=4000

image

Impact

Disclose internal web services?

References

@jasonraimondi jasonraimondi published to jasonraimondi/url-to-png Jul 13, 2024
Published to the GitHub Advisory Database Jul 15, 2024
Reviewed Jul 15, 2024
Published by the National Vulnerability Database Jul 15, 2024
Last updated Aug 4, 2024

Severity

Low

EPSS score

0.043%
(10th percentile)

Weaknesses

CVE ID

CVE-2024-39919

GHSA ID

GHSA-342q-2mc2-5gmp

Credits

Loading Checking history
See something to contribute? Suggest improvements for this vulnerability.