We provide security patches for the latest minor release line. Older lines receive fixes only for Critical / High vulnerabilities at our discretion.
| Version | Supported |
|---|---|
| 0.17.x | ✅ Yes |
| < 0.17 | ❌ No |
If you discover a security vulnerability in netipar/laravel-chunky, please
report it privately. Do not open a public GitHub issue.
Two channels:
- GitHub Private Vulnerability Reporting (preferred): use the "Report a vulnerability" button at https://github.com/NETipar/laravel-chunky/security/advisories/new.
- Email: send a description to
dev@netipar.huwith:- A clear description of the issue and its impact
- Steps to reproduce
- The affected version(s)
- Any proof-of-concept code (if applicable)
We will acknowledge your report within 72 hours and provide an estimated timeline for a fix. Once the issue is resolved, we publish a GitHub Security Advisory crediting the reporter (unless you request otherwise).
We follow coordinated disclosure: we publish the advisory only after a patched release is available on Packagist and npm.
The package treats these as security-relevant boundaries:
- Path traversal —
file_nameis regex-validated and the assembler appliesbasename()defense-in-depth. - IDOR — every upload/batch HTTP route, the broadcast channels, and
the Livewire component delegate to the bound
Authorizerinterface. - Mass assignment — Eloquent models use explicit
$fillable. - Broadcast payload sanitisation —
disk/finalPathare stripped by default; opt-in viachunky.broadcasting.expose_internal_paths. - Idempotency — chunk POSTs cache responses by
(uploadId, chunkIndex, Idempotency-Key|checksum)to prevent duplicate side-effects on retry. - Rate / size caps —
chunky.metadata.max_keys,chunky.max_files_per_batch,chunky.max_chunks_per_uploadand the per-routethrottle:chunkyrate limiter bound user-supplied input. - Lock-driver compatibility guard — boot-time refusal to run with
lock_driver = "cache"againstarray/filecache stores. TheFilesystemTrackerand batch-counter critical sections throw rather than silently fall through when no lock can be acquired. - Cache-key namespacing — every lock / idempotency / counter key is
prefixed via
chunky.cache.prefix(defaultchunky:v1:), so future payload-shape changes can invalidate cached entries cleanly without cooperating cache backends.
If you believe one of these surfaces is bypassable, that's a security issue — report privately as above.