Privilege escalation in Pubjet plugin for WordPress via check-token
Key facts
- Attack vector
- Network
- Privileges required
- Low
- User interaction
- None
- Attack complexity
- Low
- Impact type
- Privilege escalation
- Confidentiality · integrity · availability
- Low · High · Low
- Fix status
- No fix listed
Attack profile from CVSS 3.1 · CNA. Fix status from CNA. Impact type from CWE-269.
Summary
The Pubjet | پابجت plugin for WordPress is affected in all versions up to and including 5.4.8. The checkToken() AJAX handler performs no capability check and no nonce verification, so it overwrites the stored REST API token with a value taken from the request (CWE-269). An authenticated attacker with Subscriber access or higher can plant their own token, then use it to create, modify and delete reportage posts and change plugin settings.
Written with Claude Haiku 5.5 from the sources below · 2026-11-06
Description from the CNA
The Pubjet | پابجت plugin for WordPress is vulnerable to Privilege Escalation in all versions up to, and including, 5.4.8. This is due to the `checkToken()` AJAX handler — registered under `wp_ajax_pubjet-check-token` — performing no capability check and no nonce verification before unconditionally writing the attacker-supplied `token` GET parameter directly into the site-wide `pubjet_settings` option via `pubjet_update_setting()`, prior to any remote validation. This makes it possible for authenticated attackers, with Subscriber-level access and above, to overwrite the plugin's stored REST API credential with an attacker-chosen value, immediately elevating their effective privileges to those of an authorized Pubjet API client and enabling them to invoke otherwise-restricted endpoints — `createReportage`, `updateReportage`, `deleteReportage`, `toggleCopyright`, and `createBacklink` — to create, modify, and delete arbitrary reportage posts and manipulate plugin state that Subscribers cannot normally access. The privilege escalation is self-reinforcing: because `RestApi::isTokenValid()` authenticates solely by comparing the incoming `Authorization` header against the value returned by `pubjet_token()`, which reads from the same option the unprotected handler writes to, the attacker-planted token is trusted as legitimate on all subsequent requests.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- None
- Automatable
- No
- Technical impact
- Partial
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
Remediation
The sources list no fixed version for Pubjet | پابجت.
Written with Claude Haiku 5.5 from the sources below · 2026-11-06
Timeline
- 2026-11-06 Threatist record created from CVE-2026-103479
- 2026-11-06 Alias added: GHSA-m2wp-4mqg-4392
- 2026-11-06 CISA SSVC decision points changed
- 2026-11-06 Priority changed: MEDIUM → LOW
References
Other 6
- https://www.wordfence.com/threat-intel/vulnerabilities/id/0391145a-2707-4639-80d0-a8a98512ef66?source=cve
- https://plugins.trac.wordpress.org/browser/pubjet/tags/5.4.8/includes/Ajax.php#L643
- https://plugins.trac.wordpress.org/browser/pubjet/tags/5.4.8/includes/Ajax.php#L631
- https://plugins.trac.wordpress.org/browser/pubjet/tags/5.4.8/includes/Ajax.php#L26
- https://plugins.trac.wordpress.org/browser/pubjet/tags/5.4.8/includes/RestApi.php#L374
- https://plugins.trac.wordpress.org/browser/pubjet/tags/5.4.8/includes/RestApi.php#L363
More pubjet vulnerabilities
- TI-2026-70334 WordPress Pubjet plugin missing authorization allows settings change CVSS 3.1HIGH 7.6
Sources
- CVE-2026-103479 · CVE Program
- CVE-2026-103479 · NVD
- FIRST EPSS
- GHSA-m2wp-4mqg-4392 · GitHub Advisory Database · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences