Changelog
Release history and version updates for eslint-plugin-lambda-security
Live from GitHub
This changelog is fetched directly from CHANGELOG.md on GitHub and cached for 2 hours.
[1.2.3] - 2026-02-08
1.2.5
Patch Changes
-
#220
ad8416dThanks @ofri-peretz! - Fix runtime crashes when linting realistic AWS Lambda handlers under ESLint 9.The published
1.2.3tarball was a stale build: its rules still threw on the generated lambda-ai-corpus handlers, even though source had already been fixed. This republishes the corrected build and locks it with a regression test.no-error-swallowingno longer throwsRangeError: Maximum call stack size exceeded. The old build walked the catch-block AST by hand and recursed through the cyclicnode.parentreference; source now usessourceCode.getText()+ a regex.require-timeout-handling,no-missing-authorization-check, andno-unbounded-batch-processingno longer throwError: Unknown class name: exit. They used a grouped:exitselector ('A:exit, B:exit, C:exit'); ESLint only strips the trailing:exit, so esquery received a bare:exit. Source now uses one listener key per node type.plugin.meta.versionis now read frompackage.jsoninstead of a hardcoded string, so a build can no longer mislabel its own version (1.2.3 embedded1.1.0).
-
#213
391dbe6Thanks @ofri-peretz! - Align every security rule'smeta.docs.cvssto the CVSS its finding actually emits. The emitted machine-readable message sources itsCVSS:xfromCWE_MAPPINGviaformatLLMMessage→enrichFromCWE, but the staticmeta.docs.cvssdocumentation field had drifted on 45 rules across these 7 plugins — e.g.no-hardcoded-credentialsdocumented9.5while emittingCVSS:9.8(the value the published article and SARIF/LLM consumers already read).This corrects the documentation metadata only — no emitted finding changes. Locked by
security-cvss-docs-consistency.lock.test.ts(cross-plugin: every security rule'smeta.docs.cvssmust equal the CVSS it emits), theno-hardcoded-credentialsrule lock (real ESLintLinteremission), and a devkitenrichFromCWEcontract test pinningCWE-798 → 9.8.Follow-up (not in scope): 50 security rules document a CVSS that never appears in any emitted message (their messages carry no CWE), and several rules emit the generic CWE score where a rule-specific score may be warranted — both change emitted output and are separate decisions.
1.2.4
Patch Changes
-
#144
8843ce7Thanks @ofri-peretz! - fix: ILB-Wild FP reduction + doc examples + doc-test-alignment scanner fixesno-unlimited-resource-allocation— FP reduction (430 Edge FPs)- Skip loop-allocation reporting when the first argument is a numeric literal (e.g.
Buffer.alloc(1024)inside a loop is statically bounded, not a risk) - Skip
Array.isArray,Array.from,Array.ofcalls in thealloc/Arraypattern check (these don't allocate unbounded memory)
no-hardcoded-credentials— FP reduction (~280 Edge FPs)- Extended test-file skip to cover
.fixture.,.mock.,__mocks__/,/tests/,/fixtures/,/mocks/paths - Skip string literals that are fallback values in
process.env.X || 'fallback'expressions — the secret lives in the environment, the string is only a dev-mode default
Doc examples — 4 rules now have ❌ Incorrect examples
lambda-security/no-missing-authorization-checklambda-security/no-overly-permissive-iam-policynode-security/prefer-native-crypto(renamed non-standard### ❌ Third-Party (Flagged)to### ❌ Incorrect)vercel-ai-security/require-tool-confirmation(replaced placeholder with a real tested example)
ilb-doc-test-alignmentscanner fixes- Accept both
## ❌and### ❌headings (docs use H3 under an H2## Examplessection; was only finding H2) - Slice from end-of-line rather than end-of-regex-match (prevents
## ❌ Incorrect Codefrom leaving a partial heading in the parsed section)
Result:
ilb:doc-test-alignment→ 206 ok, 0 doc has no ❌ examples (was 165 missing). - Skip loop-allocation reporting when the first argument is a numeric literal (e.g.
-
#194
55d5c0aThanks @ofri-peretz! - Fix a hard crash (Error: Unknown class name: exit) that aborted the entire ESLint run on ESLint 9 whenever therecommendedorstrictconfig was enabled.Three rules —
require-timeout-handling,no-missing-authorization-check, andno-unbounded-batch-processing— registered their function-exit listener as a single comma-joined selector key:'ArrowFunctionExpression:exit, FunctionExpression:exit, FunctionDeclaration:exit'ESLint only strips a trailing
:exitbefore handing a selector to esquery, so the earlier:exittokens survived into the parser and threwUnknown class name: exitfor every linted file. Each listener is now registered as one key per node type, which is the only esquery-safe form.A config-level regression test (
src/index.test.ts) now boots the real ESLint engine against both shipped configs, so any future comma-joined:exit— or any other unparseable selector in any rule — fails in CI instead of in a consumer's editor.@interlace/eslint-configre-exports therecommendedconfig and is republished against the fixed plugin. -
#143
213cde1Thanks @ofri-peretz! - fix(no-missing-null-checks): eliminate 53 false positives via three new narrowing patternsRules that were recognized as null guards are now correctly identified as safe:
- Truthy if guard —
if (obj) { obj.prop }— direct truthy check proves non-null. Also covers chains:if (response)protectsresponse.data.items. - Short-circuit AND —
obj && obj.prop— right side of&&only runs when left is truthy. - Ternary consequent —
obj ? obj.prop : fallback— truthy test guards the consequent.
Also: bumped
beforeAlltimeout to 30 seconds in 7 compatibility test files (__compatibility__/*.spec.ts). Native-addon packages routinely exceed the previous 10-second default on a cold ESM load. - Truthy if guard —
-
Updated dependencies [
736a5fe]:- @interlace/eslint-devkit@1.4.1
Bug Fixes
- align codecov component IDs with full package names (2831b968)
Documentation
- fix changelog header format across all packages (c3a15082)
❤️ Thank You
- Ofri Peretz
[1.2.2] - 2026-02-06
Bug Fixes
- align codecov component names and update docs components (0a59a86c)
❤️ Thank You
- Ofri Peretz
[1.2.1] - 2026-02-02
This was a version bump only for eslint-plugin-lambda-security to align it with other projects, there were no code changes.
Changelog
All notable changes to eslint-plugin-lambda-security will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.0.0] - 2025-12-29
Added
Credential & Secrets Protection Rules (3)
no-hardcoded-credentials-sdk- Detect hardcoded AWS credentials in SDK v3 clients (CWE-798)no-secrets-in-env- Detect secrets hardcoded in environment variables (CWE-798)no-env-logging- Detect logging entire process.env object (CWE-532)
CORS Security Rules (2)
no-permissive-cors-response- Detect wildcard CORS in Lambda response headers (CWE-942)no-permissive-cors-middy- Detect permissive CORS in @middy/http-cors middleware (CWE-942)
Presets (2)
recommended- Balanced security defaultsstrict- All 5 rules as errors
Features
- LLM-optimized error messages with CWE references
- OWASP Serverless Top 10 alignment (SAS-2, SAS-3, SAS-4)
- AWS SDK v3 client detection (S3, DynamoDB, Lambda, STS, etc.)
- Middy middleware detection (@middy/http-cors)
- Real AWS access key pattern matching (AKIA*, ASIA*)
- TypeScript support with exported option types
- Comprehensive test coverage (78 tests, 97.40% line coverage)
- Auto-fix for CORS violations
Security
- Covers 3 CWEs: 532, 798, 942
- Maps to OWASP Serverless Top 10: SAS-2, SAS-3, SAS-4
View on GitHub →
Building secure JavaScript with Interlace? Star the repo to get new rules and CWE coverage as we ship them — or follow the AI-code-security benchmarks behind them.