
Disclosure for CVE-2025-9886 and CVE-2025-9952
Disclosure for CVE-2025-9886 and CVE-2025-9952.
This repository discloses a vulnerability discovered in Trinity Audio <= 5.20.1,WordPress plugin developed by sergiotrinity.
| CVE ID | Type | Component | Impact |
|---|
| CVE-2025-9886 | Cross-Site Request Forgery | admin/inc/post-management.php | Bulk enable/disable of Trinity Audio on posts under the victim’s session |
| CVE-2025-9952 | Reflected Cross-Site Scripting | admin/inc/post-management.php | Arbitrary script execution |
Affected Component: Post Management page handler (admin/inc/post-management.php)
Attack Vector: Cross-origin POST to wp-admin/admin.php?page=trinity_audio_post_management
Trigger: An authenticated admin visits an attacker-controlled page that auto-submits a crafted form
Impact: Attacker forces bulk state changes (enable/disable Trinity Audio on all posts or a date range) with the admin’s privileges, harming integrity and potentially availability
Affected Component: Post Management page handler (admin/inc/post-management.php)
Attack Vector: Cross-origin POST to wp-admin/admin.php?page=trinity_audio_post_management with post-management-action=activate-all-posts-range, range-before-after=after, and a valid date followed by HTML.
Trigger: An authenticated admin visits an attacker-controlled page that auto-submits the crafted form. At least one post published after the supplied date must exist.
Impact: Arbitrary JavaScript executes in the admin’s origin, enabling session theft, settings manipulation, or CSRF chaining.
By combining these two vulnerabilities, an attacker can execute arbitrary scripts by directing users to a site containing the following form.
<form method="POST" action="https://victim.example.com/wp-admin/admin.php?page=trinity_audio_post_management">
<input type="hidden" name="action" value="1">
<input type="hidden" name="post-management-action" value="activate-all-posts-range">
<input type="hidden" name="range-before-after" value="after">
<input type="hidden" name="range-date" value="2025-09-03<img src=x onerror=alert(document.domain)>">
</form>
<script>document.forms[0].submit();</script>
CSRF(CVE-2025-9886): The state-changing endpoint accepts cross-origin requests without CSRF defenses. There is no nonce verification (check_admin_referer/wp_verify_nonce) and no Origin/Referer validation. Because cookies are sent automatically, an attacker can cause actions to run under an authenticated user’s session.
Reflected XSS(CVE-2025-9952): The Post Management handler (admin/inc/post-management.php) interpolates the range-date POST value into the success notice without output encoding (no esc_html()/wp_kses()), allowing HTML/JS injection.
一見ただのCSRFとSelfXSSだが、これらを組み合わせることでCSRFを成功させれば任意のJSを実行させることが出来る。 このような面白いPoCを作成することが出来て楽しかった。
Name: MooseLove
Role: Independent security researcher / bug hunter
Contact: Available upon request
This advisory is provided for public security awareness. Free to share with attribution.