Releases: semgrep/semgrep-interfaces
Release v1.103.0
1.103.0 - 2025-01-15
Added
-
pro: taint: Support for lambdas as callbacks.
var tainted = source(); function withCallback1(val, callback) { if (val) { callback(val); } } withCallback1(tainted, function (val) { sink(val); // finding ! }); (code-7626)
-
pro: python: Semgrep will now consider top-level lambdas like
x
below for
inter-procedural analysis:x = lambda s: sink(s) # now we get a finding ! x(taint) (gh-10731)
Changed
- Removed
pip
from the Semgrep Docker image. If you need it, you may install it by runningapk add py3-pip
. (saf-1774)
Fixed
- Python: Now correctly parsing files with parenthesized
with
s, like this:with ( f() as a, g() as b, ): pass ``` (saf-1802)
- Semgrep will now truncate error messages that are produced when they are very long (saf-333)
Release v1.102.0
1.102.0 - 2025-01-08
Added
- Added pro-only support for parsing a dependency graph from package-lock.json v1 files (SC-1858)
- Added pro-only support for parsing a dependency graph from package-lock.json v2 and v3 files (SC-1991)
- The poetry.lock parser can now parse dependency relationships (ssc-1970)
- The Yarn.lock V1 and V2 parsers can parse dependency relationships. (ssc-1988)
Fixed
- The
semgrep test
andsemgrep validate
commands have been
correctly documented as EXPERIMENTAL (in semgrep --help).
Those commands are not GA yet and people should still
use thesemgrep scan --test
andsemgrep scan --validate
(or
the variants without the implicit "scan") commands (unless
they want to experiment with getting results faster and are ok
with incomplete coverage of the legacysemgrep --test
andsemgrep --validate
). (experimental) - Improve error handling for functionality ancillary to a scan (such as looking for nosemgrep comments and rendering autofixes) to reduce the likelihood of an unexpected error in such a component bringing down the entire scan. (saf-1737)
- Fix the behavior of semgrep when running into broken symlinks.
If such a path is passed explicitly as a scanning root on the
command line, it results in an error. Otherwise if it's a file discovered
while scanning the file system, it's a warning. (saf-1776) - Fixed another crash due to exception in lines_of_file. The code
should now be more robust and not abort the whole scan when
an out of bound line access happens during the nosemgrep analysis
or when outputing the lines of a match. (saf-1778) - Direct dev dependencies in yarn/npm lockfiles are now correctly marked as direct (sc-1996)
Release v1.101.0
1.101.0 - 2024-12-18
Added
- Improved pnpm-lock.yaml parsing. (gh-2663)
Changed
- Re-ordered some terminal output of
semgrep ci
to allow semgrep-app to block scans based on specific findings (SECW-2740) - A few fields in the JSON output (e.g., "fingerprint", "metavars") require now
the user to be logged in to see them.
See https://semgrep.dev/docs/semgrep-appsec-platform/json-and-sarif#json
for more information. (json) - We're renaming semgrep OSS to Semgrep Community Edition.
See https://semgrep.dev/blog/2024/important-updates-to-semgrep-oss/
for more information. (rename) - A few fields in the SARIF output (e.g., "fingerprints") require now
the user to be logged in to see them.
See https://semgrep.dev/docs/semgrep-appsec-platform/json-and-sarif#sarif
for more information. (sarif)
Fixed
-
pro: Improved inter-file tracking of tainted global variables. (code-7054)
-
Python (pro-only): Taint now correctly tracks through calls to class methods
within a class, via thecls
parameter.So for instance, we would be able to determine a source-to-sink
vulnerability in the following code snippet:class A: def foo(self, x): sink(x) @classmethod def bar(cls): cls.foo(source) ``` (saf-1765)
-
pro: Fixed bug when generating inter-procedural taint traces, that it could
cause a call-step to be missing in the trace. (saf-1783) -
Restored the "rules" field in the SARIF output, even when logged out. (saf-1794)
Release v1.100.0
1.100.0 - 2024-12-12
Added
- Pro engine now correctly distinguishes overloaded Scala methods based on their
arity and parameter types, e.g.,foo(x: Int, y: String)
vs.foo(x: String, y: Int)
. (code-7870)
Changed
- The minimum Python version for semgrep is now 3.9.
We are dropping support for Python 3.8 (python)
Fixed
-
pro: Fixed a bug in interprocedural index-sensitive taint analysis that caused
false negatives when a function updated an arbitrary index, e.g.:var x = {}; function foo(k) { x[k] = source(); } function test(k) { foo(k); sink(x); // finding here! } (CODE-7838)
-
Fixed bug affecting taint tracking through static fields when mixing accesses
using the class name and using an instance object, e.g.:class C { static String s; } ... C o = new C(); C.s = taint; sink(o.s); // finding ! (CODE-7871)
-
No more RPC error when using --sarif with some join-mode rules.
Moreover, regular rules without the 'languages:' field will be skipped
instead of aborting the whole scan. (gh-10723)
Release v1.99.0
1.99.0 - 2024-12-05
Fixed
- Fix the date format used in --gitlab-sast option to match
the spec and not use the RFC 3339.
Thanks to Elias Haeussler for the fix. (saf-1755)
Release v1.97.0
1.97.0 - 2024-11-19
Added
- Improved logic for interfile analysis in TypeScript projects using
project references. (code-7677) - Semgrep Pro engine now resolves method invocations on abstract classes. In
addition to the existing resolution for interface method invocations, this
change further enhances dataflow tracking accuracy for dynamic method
invocations. (code-7750) - Added the ability to validate temporary AWS tokens in the secrets product. (gh-2554)
- Poetry.lock & Pyproject.toml parsers can now handle multiline strings. (ssc-1942)
Fixed
- Improved error handling for some networking errors (e.g., premature server
disconnection). In some cases this would previously cause a fatal error, but we
should instead be able to recover in most instances (and now can). (code-7715) - Target file selection in git projects: files containing special characters
(according to git) are now scanned correctly instead of being ignored. (saf-1687) - Swift: Ellipses and metavariable ellipses can now be used as function parameters in patterns. (saf-1721)
- Semgrep will no longer freeze when tracing is enabled and it has a low memory limit (saf-1722)
- osemgrep-pro: Autofix and nosemgrep now work properly (saf-1724)
Release v1.96.0
1.96.0 - 2024-11-07
Added
-
The pro engine now handles duplicate function names in C. When duplicate
functions are found, we assume that any of the duplicated functions could be
called. For example, if the functionfoo
is defined in two different files,
taint errors will be reported for both instances:// "a/test.h" void foo(int x) { //deepruleid: dup-symbols sink(x); } // "b/test.h" void foo(int x) { //deepruleid: dup-symbols sink(x); } // "main.c" #ifdef HEADER_A #include "a/test.h" #else #include "b/test.h" #endif int main() { int x = source(); foo(x); } ``` (code-7654)
Changed
- Reduced memory allocations while processing nosemgrep comments, improving memory use and time for scans with a large number of findings. (nosem-mem)
Fixed
- Optimized taint-mode (only in Pro) to scale better when there is a large number
of matches of sources/propagators/sanitizers/sinks within a function. (flow-83) - Fixed a bug in the supply chain scanner's gradle lockfile parser. Previously, semgrep would fail to parse
any gradle lockfile which did not start with a specific block comment. Now, semgrep will parse gradle
lockfiles correctly by ignoring the comment (allowing any or no comment at all to exist). (gh-10508) - Exceptions thrown during the processing of a target should not fail
the whole scan anymore (regression introduced in 1.94.0). The scan will
have an exit code of 0 instead of 2 (unless the user passed --strict in which
case it will exit with code 2). (incid-110) - Fix exponential parsing time with generic mode on input containing many
unclosed braces on the same line. (saf-1667) - Fix regexp parsing error occurring during ReDoS analysis when encountering
a character class starting with[:
such as[:a-z]
. (saf-1693) - Fix in
semgrep scan
: anchored semgrepignore patterns for folders such
as/tests
are now honored properly. Such patterns had previously no
effect of target file filtering. (semgrepignore-anchored-dirs)
Release v1.95.0
1.95.0 - 2024-10-31
Changed
- Remove deprecated
--enable-experimental-requirements
flag. Functionality has
been always enabled since Semgrep 1.93.0. (ssc-1903)
Fixed
- osemgrep: Running
osemgrep
with the Pro Engine now correctly runs rules with proprietary languages (saf-1686) - Fixed bug where semgrep would crash if --trace was passed (saf-tracing)
Release v1.94.0
1.94.0 - 2024-10-30
Fixed
-
pro: taint-mode: Semgrep should no longer confuse a
return
in a lambda with
areturn
in its enclosing function.E.g. In the example below the return value of
foo
is NOT tainted:function foo() { bar(() => taint); return ok; } (code-7657)
-
OCaml: matching will now recognized "local open" so that a pattern like
Foo.bar ...
will now correctly match code such aslet open Foo in bar 1
orFoo.(bar 1)
in addition to the classicFoo.bar 1
. (local_open) -
Project files lacking sufficient read permissions are now skipped gracefully
by semgrep. (saf-1598) -
Semgrep will now print stderr and additional debugging info when semgrep-core
exits with a fatal error code but still returns a json repsonse (finishes
scanning) (saf-1672) -
semgrep ci should parse correctly git logs to compute the set of contributors
even if some authors have special characters in their names. (saf-1681)
Release v1.93.0
1.93.0 - 2024-10-23
Added
- Improved naming for Common JS module imports (
require
) in arbitrary
expression contexts. Notably, in-line use ofrequire
should now be linked to
the correct module. For instance, the patternfoo.bar
should now match
againstrequire('foo').bar
and taint is likewise similarily tracked. (code-7485) - Secrets:
semgrep ci
output now includes a list of all secrets rules which
generated at least one blocking finding (similar to Code) (code-7663) - Added experimental support via
--allow-dynamic-dependency-resolution
for dynamic resolution of Maven and Gradle dependencies for projects that do not have lockfiles (in Semgrep Pro only). (gh-2389) - Expanded support for pip requirement lockfiles is now available by default. Semgrep will now
find any requirement.txt file and lockfiles in a requirements folder (**/requirements/*.txt).
The existing experimental flag--enable-experimental-requirements
is now deprecated and
will be removed in a future release. (gh-2441)
Changed
- Removed support for Vue. The tree-sitter grammar has not been updated in 3 years,
there was no community rules added and semgrep-vue is causing linking conflicts
when compiling semgrep under Windows so just simpler to remove support for Vue.
In theory, extract mode could be a good substitute to parse Vue files. (vue)
Fixed
- semgrep will now print exit codes if a segfault/OOM/other terminating signal happens in semgrep-core, or any of semgrep-core's child processes (saf-1646)