Read the docs

Privilege escalation in Pubjet plugin for WordPress via check-token

Priority LOW 33CWE-269Published · Updated

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

Exploitation None reported CISA SSVC · not in CISA KEV
EPSS 0.00375 31st percentileScored 2026-11-07
Fix No fix listed No fixed version in the sources yet

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

VendorProductAffected versionsFixed inStatusSource
pubjetPubjet | پاب‌جتup to 5.4.8—No fix listedCNA
  • Pubjet | پاب‌جت Vendorpubjet Affected up to 5.4.8 Fixed in — No fix listed CNA

Remediation

The sources list no fixed version for Pubjet | پاب‌جت.

Written with Claude Haiku 5.5 from the sources below · 2026-11-06

Timeline

  1. 2026-11-06 Threatist record created from CVE-2026-103479
  2. 2026-11-06 Alias added: GHSA-m2wp-4mqg-4392
  3. 2026-11-06 CISA SSVC decision points changed
  4. 2026-11-06 Priority changed: MEDIUM → LOW

References

  • TI-2026-70334 WordPress Pubjet plugin missing authorization allows settings change CVSS 3.1HIGH 7.6

Sources