← All recipes
Moderne licensed

Find non-constant-time comparison of cryptographic digests

Recipe IDorg.openrewrite.analysis.java.security.FindInsecureCryptoComparison
Artifactio.moderne.recipe:rewrite-program-analysis

Detects when the output of MessageDigest.digest(..) or Mac.doFinal(..) flows into Arrays.equals(byte[], byte[]), a non-constant-time comparison that is vulnerable to timing attacks (CWE-208). Use MessageDigest.isEqual(byte[], byte[]) for security-sensitive byte-array comparisons.

Single recipeCWE-208Proprietary

Usage

This recipe has no required configuration options. You’ll need the Moderne CLI configured before running the command below.

mod run . --recipe org.openrewrite.analysis.java.security.FindInsecureCryptoComparison

If the recipe isn’t available locally, install it with:

mod config recipes jar install io.moderne.recipe:rewrite-program-analysis:0.13.7

Data tables

Structured output this recipe can produce.

  • Taint flowRecords taint flows from sources to sinks with their taint types.org.openrewrite.analysis.java.taint.table.TaintFlowTable
  • Source files that had resultsSource files that were modified by the recipe run.org.openrewrite.table.SourcesFileResults
  • Source files that had search resultsSearch results that were found during the recipe run.org.openrewrite.table.SearchResults
  • Source files that errored on a recipeThe details of all errors produced by a recipe run.org.openrewrite.table.SourcesFileErrors
  • Recipe performanceStatistics used in analyzing the performance of recipes.org.openrewrite.table.RecipeRunStats