Skip to content

Commit 49dcd35

Browse files
committed
Add SignedDescriptions SAST flag for sarif results
1 parent 2f78589 commit 49dcd35

File tree

4 files changed

+33
-23
lines changed

4 files changed

+33
-23
lines changed

commands/audit/audit.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66

77
jfrogappsconfig "github.com/jfrog/jfrog-apps-config/go"
8+
"github.com/jfrog/jfrog-cli-core/v2/common/format"
89
"github.com/jfrog/jfrog-cli-core/v2/utils/config"
910
"github.com/jfrog/jfrog-cli-core/v2/utils/coreutils"
1011
"github.com/jfrog/jfrog-cli-security/commands/audit/sca"
@@ -303,6 +304,7 @@ func downloadAnalyzerManagerAndRunScanners(auditParallelRunner *utils.SecurityPa
303304
DirectDependencies: auditParams.DirectDependencies(),
304305
ThirdPartyApplicabilityScan: auditParams.thirdPartyApplicabilityScan,
305306
ApplicableScanType: applicability.ApplicabilityScannerType,
307+
SignedDescriptions: auditParams.OutputFormat() == format.Sarif,
306308
ScanResults: scan,
307309
TargetOutputDir: auditParams.scanResultsOutputDir,
308310
}

jas/runner/jasrunner.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,14 @@ type JasRunnerParams struct {
3232

3333
ScansToPreform []utils.SubScanType
3434

35+
// Secret scan flags
3536
SecretsScanType secrets.SecretsScanType
36-
37+
// Contextual Analysis scan flags
38+
ApplicableScanType applicability.ApplicabilityScanType
3739
DirectDependencies *[]string
3840
ThirdPartyApplicabilityScan bool
39-
ApplicableScanType applicability.ApplicabilityScanType
41+
// SAST scan flags
42+
SignedDescriptions bool
4043

4144
ScanResults *results.TargetResults
4245
TargetOutputDir string
@@ -68,7 +71,7 @@ func AddJasScannersTasks(params JasRunnerParams) (err error) {
6871
if err = addJasScanTaskForModuleIfNeeded(params, utils.IacScan, runIacScan(params.Runner, params.Scanner, params.ScanResults.JasResults, params.Module, params.TargetOutputDir)); err != nil {
6972
return
7073
}
71-
return addJasScanTaskForModuleIfNeeded(params, utils.SastScan, runSastScan(params.Runner, params.Scanner, params.ScanResults.JasResults, params.Module, params.TargetOutputDir))
74+
return addJasScanTaskForModuleIfNeeded(params, utils.SastScan, runSastScan(params.Runner, params.Scanner, params.ScanResults.JasResults, params.Module, params.TargetOutputDir, params.SignedDescriptions))
7275
}
7376

7477
func addJasScanTaskForModuleIfNeeded(params JasRunnerParams, subScan utils.SubScanType, task parallel.TaskFunc) (err error) {
@@ -157,12 +160,12 @@ func runIacScan(securityParallelRunner *utils.SecurityParallelRunner, scanner *j
157160
}
158161

159162
func runSastScan(securityParallelRunner *utils.SecurityParallelRunner, scanner *jas.JasScanner, extendedScanResults *results.JasScansResults,
160-
module jfrogappsconfig.Module, scansOutputDir string) parallel.TaskFunc {
163+
module jfrogappsconfig.Module, scansOutputDir string, signedDescriptions bool) parallel.TaskFunc {
161164
return func(threadId int) (err error) {
162165
defer func() {
163166
securityParallelRunner.JasScannersWg.Done()
164167
}()
165-
results, err := sast.RunSastScan(scanner, module, threadId)
168+
results, err := sast.RunSastScan(scanner, module, signedDescriptions, threadId)
166169
if err != nil {
167170
return fmt.Errorf("%s %s", clientutils.GetLogMsgPrefix(threadId, false), err.Error())
168171
}

jas/sast/sastscanner.go

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,17 @@ const (
2323
type SastScanManager struct {
2424
sastScannerResults []*sarif.Run
2525
scanner *jas.JasScanner
26+
signedDescriptions bool
2627
configFileName string
2728
resultsFileName string
2829
}
2930

30-
func RunSastScan(scanner *jas.JasScanner, module jfrogappsconfig.Module, threadId int) (results []*sarif.Run, err error) {
31+
func RunSastScan(scanner *jas.JasScanner, module jfrogappsconfig.Module, signedDescriptions bool, threadId int) (results []*sarif.Run, err error) {
3132
var scannerTempDir string
3233
if scannerTempDir, err = jas.CreateScannerTempDirectory(scanner, jasutils.Sast.String()); err != nil {
3334
return
3435
}
35-
sastScanManager := newSastScanManager(scanner, scannerTempDir)
36+
sastScanManager := newSastScanManager(scanner, scannerTempDir, signedDescriptions)
3637
log.Info(clientutils.GetLogMsgPrefix(threadId, false) + "Running SAST scan...")
3738
if err = sastScanManager.scanner.Run(sastScanManager, module); err != nil {
3839
err = jas.ParseAnalyzerManagerError(jasutils.Sast, err)
@@ -45,16 +46,17 @@ func RunSastScan(scanner *jas.JasScanner, module jfrogappsconfig.Module, threadI
4546
return
4647
}
4748

48-
func newSastScanManager(scanner *jas.JasScanner, scannerTempDir string) (manager *SastScanManager) {
49+
func newSastScanManager(scanner *jas.JasScanner, scannerTempDir string, signedDescriptions bool) (manager *SastScanManager) {
4950
return &SastScanManager{
5051
sastScannerResults: []*sarif.Run{},
5152
scanner: scanner,
53+
signedDescriptions: signedDescriptions,
5254
configFileName: filepath.Join(scannerTempDir, "config.yaml"),
5355
resultsFileName: filepath.Join(scannerTempDir, "results.sarif")}
5456
}
5557

5658
func (ssm *SastScanManager) Run(module jfrogappsconfig.Module) (err error) {
57-
if err = ssm.createConfigFile(module, ssm.scanner.Exclusions...); err != nil {
59+
if err = ssm.createConfigFile(module, ssm.signedDescriptions, ssm.scanner.Exclusions...); err != nil {
5860
return
5961
}
6062
if err = ssm.runAnalyzerManager(filepath.Dir(ssm.scanner.AnalyzerManager.AnalyzerManagerFullPath)); err != nil {
@@ -74,14 +76,15 @@ type sastScanConfig struct {
7476
}
7577

7678
type scanConfiguration struct {
77-
Roots []string `yaml:"roots,omitempty"`
78-
Type string `yaml:"type,omitempty"`
79-
Language string `yaml:"language,omitempty"`
80-
ExcludePatterns []string `yaml:"exclude_patterns,omitempty"`
81-
ExcludedRules []string `yaml:"excluded-rules,omitempty"`
79+
Roots []string `yaml:"roots,omitempty"`
80+
Type string `yaml:"type,omitempty"`
81+
Language string `yaml:"language,omitempty"`
82+
ExcludePatterns []string `yaml:"exclude_patterns,omitempty"`
83+
ExcludedRules []string `yaml:"excluded-rules,omitempty"`
84+
SignedDescriptions bool `yaml:"signed_descriptions,omitempty"`
8285
}
8386

84-
func (ssm *SastScanManager) createConfigFile(module jfrogappsconfig.Module, exclusions ...string) error {
87+
func (ssm *SastScanManager) createConfigFile(module jfrogappsconfig.Module, signedDescriptions bool, exclusions ...string) error {
8588
sastScanner := module.Scanners.Sast
8689
if sastScanner == nil {
8790
sastScanner = &jfrogappsconfig.SastScanner{}
@@ -93,11 +96,12 @@ func (ssm *SastScanManager) createConfigFile(module jfrogappsconfig.Module, excl
9396
configFileContent := sastScanConfig{
9497
Scans: []scanConfiguration{
9598
{
96-
Type: sastScannerType,
97-
Roots: roots,
98-
Language: sastScanner.Language,
99-
ExcludedRules: sastScanner.ExcludedRules,
100-
ExcludePatterns: jas.GetExcludePatterns(module, &sastScanner.Scanner, exclusions...),
99+
Type: sastScannerType,
100+
Roots: roots,
101+
Language: sastScanner.Language,
102+
ExcludedRules: sastScanner.ExcludedRules,
103+
SignedDescriptions: signedDescriptions,
104+
ExcludePatterns: jas.GetExcludePatterns(module, &sastScanner.Scanner, exclusions...),
101105
},
102106
},
103107
}

jas/sast/sastscanner_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,12 @@ func TestNewSastScanManager(t *testing.T) {
1717
jfrogAppsConfigForTest, err := jas.CreateJFrogAppsConfig([]string{"currentDir"})
1818
assert.NoError(t, err)
1919
// Act
20-
sastScanManager := newSastScanManager(scanner, "temoDirPath")
20+
sastScanManager := newSastScanManager(scanner, "temoDirPath", true)
2121

2222
// Assert
2323
if assert.NotNil(t, sastScanManager) {
2424
assert.NotEmpty(t, sastScanManager.configFileName)
25+
assert.True(t, sastScanManager.signedDescriptions)
2526
assert.NotEmpty(t, sastScanManager.resultsFileName)
2627
assert.NotEmpty(t, jfrogAppsConfigForTest.Modules[0].SourceRoot)
2728
assert.Equal(t, &jas.FakeServerDetails, sastScanManager.scanner.ServerDetails)
@@ -35,7 +36,7 @@ func TestSastParseResults_EmptyResults(t *testing.T) {
3536
assert.NoError(t, err)
3637

3738
// Arrange
38-
sastScanManager := newSastScanManager(scanner, "temoDirPath")
39+
sastScanManager := newSastScanManager(scanner, "temoDirPath", true)
3940
sastScanManager.resultsFileName = filepath.Join(jas.GetTestDataPath(), "sast-scan", "no-violations.sarif")
4041

4142
// Act
@@ -57,7 +58,7 @@ func TestSastParseResults_ResultsContainIacViolations(t *testing.T) {
5758
jfrogAppsConfigForTest, err := jas.CreateJFrogAppsConfig([]string{})
5859
assert.NoError(t, err)
5960
// Arrange
60-
sastScanManager := newSastScanManager(scanner, "temoDirPath")
61+
sastScanManager := newSastScanManager(scanner, "temoDirPath", false)
6162
sastScanManager.resultsFileName = filepath.Join(jas.GetTestDataPath(), "sast-scan", "contains-sast-violations.sarif")
6263

6364
// Act

0 commit comments

Comments
 (0)