CVE-2021-47973
Executive Summary
CVE-2021-47973 is a denial of service (DoS) vulnerability in the Sticky Notes Widget version 3.0.6 for iOS. The flaw allows an attacker to crash the application by pasting an excessively long string (350,000 repeated characters) into a note field. The attack requires user interaction (pasting the payload twice) but no special privileges, making it a low-complexity vector for disrupting the app's availability. The vulnerability remains unpatched as of the latest available information, with no official fix from the vendor.
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 is not related to NPM, PyPI, Go, or Ruby ecosystems. It is a standalone iOS application (Sticky Notes Widget) distributed via the Apple App Store. No supply chain or package security implications apply.
CVSS Breakdown & Threat Level
- CVSS Score: 7.5 (High)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
- Attack Vector (AV): Network – the payload can be delivered remotely (e.g., via clipboard sharing or messaging).
- Attack Complexity (AC): Low – no special conditions required.
- Privileges Required (PR): None – attacker does not need authentication.
- User Interaction (UI): None – the victim does not need to perform any action beyond pasting the payload.
- Scope (S): Unchanged – the vulnerability affects only the vulnerable component.
- Confidentiality (C): None – no data exposure.
- Integrity (I): None – no data modification.
- Availability (A): High – the application crashes, denying service to the user.
Threat Level: High. The attack is trivial to execute and can be performed remotely, causing immediate application unavailability.
Deep Dive & Mechanics
The vulnerability resides in the text input handling of Sticky Notes Widget 3.0.6. When a user pastes a string of 350,000 repeated characters into a note field, the application attempts to process and render the input. Due to insufficient input validation and memory management, the application enters an infinite loop or consumes excessive memory, leading to a crash. The attack requires pasting the payload twice, suggesting that the first paste triggers a buffer or state change that the second paste exploits to cause the crash.
Root Cause: Lack of input length validation and improper handling of large strings in the note field's text processing logic. The application likely uses a fixed-size buffer or inefficient string operations that fail under extreme input sizes.
Attack Flow:
- Attacker generates a payload of 350,000 repeated characters (e.g., 'A' * 350000).
- Attacker delivers the payload to the victim (e.g., via iMessage, email, or clipboard sharing).
- Victim opens Sticky Notes Widget and creates a new note.
- Victim pastes the payload into the note field (first paste).
- Victim pastes the same payload again (second paste).
- The application crashes due to memory exhaustion or infinite loop.
Vulnerable vs. Patched Code
No patched version is available. The vulnerable code is proprietary and not publicly disclosed. However, based on the behavior, the fix would involve:
- Input validation: Limit the length of note text to a reasonable maximum (e.g., 10,000 characters).
- Memory management: Use dynamic memory allocation with bounds checking.
- Error handling: Gracefully handle oversized inputs without crashing.
Hypothetical vulnerable code (pseudocode):
func pasteText(_ text: String) {
noteText += text // No length check
renderNote() // May cause infinite loop or memory crash
}
Hypothetical patched code (pseudocode):
func pasteText(_ text: String) {
let maxLength = 10000
if noteText.count + text.count > maxLength {
showError("Text too long")
return
}
noteText += text
renderNote()
}
Exploitation & Lab Setup
Red Team (Attack Simulation)
Prerequisites:
- iOS device with Sticky Notes Widget 3.0.6 installed.
- Ability to deliver a large string to the victim (e.g., via AirDrop, iMessage, or email).
Payload Generation:
# generate_payload.py
payload = "A" * 350000
with open("payload.txt", "w") as f:
f.write(payload)
print("Payload saved to payload.txt")
Delivery & Execution:
- Transfer
payload.txtto the victim's device. - Instruct the victim to open Sticky Notes Widget, create a new note, and paste the content twice.
- The application will crash immediately after the second paste.
Expected Outcome: The Sticky Notes Widget becomes unresponsive and crashes. The user may need to force-close and restart the app.
Blue Team (Defense & Detection)
Mitigation Steps:
- Update: Check for app updates from the vendor. If no patch exists, consider using an alternative note-taking app.
- Input Filtering: Implement client-side input length limits (e.g., via iOS keyboard extensions or clipboard managers).
- User Awareness: Educate users not to paste unknown or suspiciously large text into note fields.
- App Sandboxing: iOS sandboxing limits the impact to the app itself; no system-wide crash occurs.
Detection:
- Monitor for repeated app crashes in iOS crash logs (e.g., via MDM or device logs).
- Look for large clipboard entries (though iOS does not expose clipboard size to apps).
Indicators of Compromise (IOCs)
- File:
payload.txtcontaining 350,000 repeated characters (e.g., 'A' * 350000). - Behavior: Sticky Notes Widget crashes immediately after pasting a large string twice.
- Crash Log: iOS crash logs may show
StickyNotesWidgetterminated due to signal 6 (SIGABRT) or memory pressure.
Example crash log snippet:
Incident Identifier: ...
CrashReporter Key: ...
Hardware Model: iPhone12,1
Process: StickyNotesWidget [1234]
Path: /private/var/containers/Bundle/Application/.../StickyNotesWidget.app/StickyNotesWidget
Identifier: com.example.stickynotes
Version: 3.0.6
Code Type: ARM-64
Parent Process: launchd [1]
Date/Time: ...
Launch Time: ...
OS Version: iPhone OS 14.4 (18D52)
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Triggered by Thread: 0
Detection Engineering
YARA Rule
rule CVE_2021_47973_StickyNotes_DoS {
meta:
description = "Detects payload used in CVE-2021-47973 DoS attack on Sticky Notes Widget"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2021-47973"
strings:
$payload = /A{350000}/ // Matches 350,000 consecutive 'A' characters
condition:
$payload
}
Sigma Rule
title: CVE-2021-47973 - Sticky Notes Widget DoS via Large Input
id: 12345678-1234-1234-1234-123456789abc
status: experimental
description: Detects attempts to exploit CVE-2021-47973 by pasting excessively long strings into Sticky Notes Widget
author: Valters IT
date: 2025-04-10
references:
- https://nvd.nist.gov/vuln/detail/CVE-2021-47973
logsource:
product: ios
service: crash_reporter
detection:
selection:
ProcessName: "StickyNotesWidget"
ExceptionType: "EXC_CRASH (SIGABRT)"
condition: selection
falsepositives:
- Legitimate app crashes due to other reasons
level: medium
Suricata Rule
alert tcp any any -> any any (msg:"CVE-2021-47973 Sticky Notes Widget DoS Payload"; content:"|41 41 41 41 41 41 41 41 41 41|"; depth:350000; threshold:type both, track by_src, count 1, seconds 60; classtype:attempted-dos; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Uninstall or disable Sticky Notes Widget version 3.0.6 until a patch is released.
- Use alternative note-taking apps that have proper input validation.
- Educate users not to paste large or unknown text into note fields.
Long-Term Fixes:
- Vendor: Implement input length limits (e.g., max 10,000 characters) and proper memory management.
- Users: Enable iOS app updates automatically and monitor for patches.
Workaround:
- If the app must be used, avoid pasting any text longer than a few thousand characters. Use a clipboard manager that truncates large inputs.
Valters IT
DevSecOps & Cyber Threat Intelligence Expert