
Cloud Vulnerability DB
A community-led vulnerabilities database
CVE-2026-2241 is a heap-buffer-overflow (out-of-bounds read) vulnerability in the os_strftime function of janet-lang/janet, a dynamic scripting language and bytecode VM. It affects all versions of janet up to and including 1.40.1, specifically in src/core/os.c. The vulnerability was discovered and reported on January 23, 2026, via a fuzzer-identified GitHub issue, and publicly disclosed on February 9, 2026. It carries a CVSS v3.1 base score of 6.1 (Medium) (Feedly, GitHub Issue).
The root cause is an improper null-terminator check in the os_strftime function (CWE-125: Out-of-bounds Read; CWE-119: Improper Restriction of Operations within the Bounds of a Memory Buffer). When parsing a format string containing a % character at the very end (e.g., "%H:%M:%"), the original code called strchr(valid, *p) without first verifying that *p was not a null byte (\0), causing the pointer to advance past the end of the allocated string buffer and read one byte beyond it. The ASAN report confirmed a READ of size 1 occurring 0 bytes after a 41-byte heap-allocated region at src/core/os.c:1938. Exploitation requires local access with low privileges and no user interaction — an attacker must be able to supply a crafted format string to the os/strftime function (GitHub Issue, Patch Commit).
Successful exploitation primarily causes a denial-of-service condition by crashing the janet runtime process due to the heap-buffer-overflow. There is a limited confidentiality impact, as the out-of-bounds read could theoretically expose one byte of adjacent heap memory, though this is not considered a significant data exfiltration risk. Integrity is not affected. The vulnerability's scope is limited to the local system and does not provide a direct path for lateral movement or remote code execution (Feedly, GitHub Issue).
A proof-of-concept (PoC) exploit — including a reproducer file and a fuzzer harness — has been publicly disclosed on GitHub by the reporter (oneafter) (PoC Repro, GitHub Issue). The vulnerability was discovered via fuzzing and is labeled as a fuzzer-found bug. There is no evidence of in-the-wild exploitation at this time, and it has not been added to the CISA KEV catalog. The EPSS score is approximately 0.013% (0.000130), reflecting very low probability of active exploitation (Feedly).
os/strftime with a format string ending in a bare % character (e.g., (os/strftime "%H:%M:%")).janet malicious.janet) or supply it through an embedded janet environment.os_strftime function processes the format string, encounters the trailing % without a following valid specifier or null check, and reads one byte past the end of the allocated heap buffer.os_strftime in src/core/os.c.heap-buffer-overflow at os_strftime /src/core/os.c:1938; application logs showing unhandled exceptions or abrupt termination of janet-based services.% passed to os/strftime; core dump files from the janet process.The fix is available as commit 0f285855f0e34f9183956be5f16e045f54626bff in the janet-lang repository, which adds a null-byte check (!*p) before the strchr call in os_strftime and corrects the strftime buffer size argument to use sizeof(buf). Users should upgrade to a version of janet that includes this patch (released after version 1.40.1; the latest release at time of disclosure is 1.41.2). As a workaround, restrict local user access to janet environments and avoid exposing the os/strftime function to untrusted input (Patch Commit, Feedly).
Source: This report was generated using AI
Free Vulnerability Assessment
Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.
Get a personalized demo
"Best User Experience I have ever seen, provides full visibility to cloud workloads."
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
"We know that if Wiz identifies something as critical, it actually is."