By [Author Name]
As CapCut cements its place as one of the world’s most popular video editing apps—with over 500 million mobile downloads—it has become an increasingly attractive target for security researchers and malicious hackers alike. From account takeover vulnerabilities to server-side request forgery (SSRF), security flaws in CapCut could expose millions of users’ personal data, templates, and creative assets.
To combat this, ByteDance (CapCut’s parent company) operates a bug bounty program via platforms like HackerOne and its own ByteDance Security Response Center (BSRC). But what actually happens when a critical bug is found? And how does CapCut issue a “bug bounty fix”?
Once the fix is fully deployed (usually within 30–45 days of the report), the researcher receives a bounty: capcut bug bounty fix
ByteDance then publishes an advisory on BSRC, crediting the researcher (unless anonymity is requested).
In mid-2023, a researcher discovered that CapCut’s “share template” feature used sequential, predictable numeric IDs. By incrementing the ID in the API call GET /api/template/12345, any user could download another user’s private template—including unlisted video drafts.
The fix: ByteDance replaced numeric IDs with UUID v4 tokens and added server-side ownership validation. They paid a $4,000 bounty and pushed the fix in CapCut v8.5.0 within 18 days. CapCut Bug Bounty Fix: How ByteDance Patches Security
To ensure you have the latest bug bounty fixes:
Title: IDOR in project sharing endpoint allows viewing any user's projectSteps to reproduce:
- Login as User A, create project P1 (ID 1001)
- Login as User B in another browser
- Intercept the request: GET /api/project/1001?share_token=...
- Change ID to 1000 (a project owned by User A)
- Response returns full project JSON (including private data)
Impact: Any authenticated user can view any other user’s project data. Low : $100 – $500 Medium : $500
Proposed fix (code-level): In backend handler for /api/project/:id:
- Add middleware to check
db.project.owner_id == req.session.user_id- If not matching, return 403 Forbidden
Patch suggestion (pseudo): function getProject(req, res) const project = db.findProject(req.params.id); if (project.ownerId !== req.user.id) return res.status(403).json( error: "Unauthorized" ); return res.json(project);