@@ -1965,12 +1965,55 @@ def get_vulnerabilities_risks_by_scan_id(self, scan_id, is_exploitable_path_enab
1965
1965
"cvss3 { attackComplexity, attackVector, availability, availabilityRequirement, baseScore, "
1966
1966
"confidentiality, confidentialityRequirement, exploitCodeMaturity, integrity, integrityRequirement, "
1967
1967
"privilegesRequired, remediationLevel, reportConfidence, scope, userInteraction }, "
1968
+ "vulnerabilityFixResolutionText,"
1968
1969
"pendingState, pendingChanges, packageState { type, value }, pendingScore, pendingSeverity,"
1969
1970
" isScoreOverridden } }"
1970
1971
" }" )
1971
1972
response = self .gql_request (relative_url = self .gql_relative_url , data = query )
1972
1973
return response
1973
1974
1975
+ def get_one_vulnerability (self , scan_id , vulnerability_id , package_id ):
1976
+ """
1977
+ This is a GraphQL API
1978
+ Args:
1979
+ scan_id (str):
1980
+ vulnerability_id (str):
1981
+ package_id (str):
1982
+
1983
+ Returns:
1984
+
1985
+ """
1986
+ query = ("query { "
1987
+ "vulnerability ("
1988
+ f"scanId: \" { scan_id } \" , "
1989
+ f"vulnerabilityId: \" { vulnerability_id } \" , "
1990
+ f"packageId: \" { package_id } \" "
1991
+ ")"
1992
+ "{ packageState { type, value }, assignedPolicies, violatedPolicies, pendingChanges, pendingState, "
1993
+ "state, score, pendingScore, pendingSeverity, isScoreOverridden, morEntityProfilesApplied, credit, "
1994
+ "notes, isIgnored, cve, cwe, description, packageId, severity, type, published, isKevDataExists, "
1995
+ "isExploitDbDataExists, isVulnerabilityNew, detectionDate, relation, vulnerabilityFixResolutionText, "
1996
+ "cweInfo { title }, packageInfo { name, packageRepository, version }, isExploitable, exploitablePath "
1997
+ "{ methodMatch { fullName, line, namespace, shortName, sourceFile }, methodSourceCall { fullName, "
1998
+ "line, namespace, shortName, sourceFile } }, "
1999
+ "vulnerablePackagePath { id, isDevelopment, isResolved, "
2000
+ "name, version, vulnerabilityRiskLevel }, "
2001
+ "references { comment, type, url }, "
2002
+ "cvss2 { attackComplexity, attackVector, authentication, availability, availabilityRequirement,"
2003
+ " baseScore, collateralDamagePotential, confidentiality, confidentialityRequirement,"
2004
+ " exploitCodeMaturity, integrityImpact, integrityRequirement, remediationLevel, reportConfidence, "
2005
+ "targetDistribution, severity }, cvss3 { attackComplexity, attackVector, availability,"
2006
+ " availabilityRequirement, baseScore, confidentiality, confidentialityRequirement, "
2007
+ "exploitCodeMaturity, integrity, integrityRequirement, privilegesRequired, remediationLevel, "
2008
+ "reportConfidence, scope, userInteraction, severity }, "
2009
+ "cvss4 { attackComplexity, attackVector, attackRequirements, privilegesRequired, userInteraction, "
2010
+ "vulnerableSystemConfidentiality, vulnerableSystemIntegrity, vulnerableSystemAvailability, "
2011
+ "subsequentSystemConfidentiality, subsequentSystemIntegrity, subsequentSystemAvailability, "
2012
+ "baseScore, severity }, isEpssDataExists, epssData { cve, date, epss, percentile } }"
2013
+ " }" )
2014
+ response = self .gql_request (relative_url = self .gql_relative_url , data = query )
2015
+ return response
2016
+
1974
2017
def get_supply_chain_risks_by_scan_id (self , scan_id , take = 10 , skip = 0 ):
1975
2018
"""
1976
2019
This is a GraphQL API
@@ -2667,6 +2710,10 @@ def get_vulnerabilities_risks_by_scan_id(scan_id, is_exploitable_path_enabled=Fa
2667
2710
take = take , skip = skip )
2668
2711
2669
2712
2713
+ def get_one_vulnerability (scan_id , vulnerability_id , package_id ):
2714
+ return Sca ().get_one_vulnerability (scan_id = scan_id , vulnerability_id = vulnerability_id , package_id = package_id )
2715
+
2716
+
2670
2717
def get_supply_chain_risks_by_scan_id (scan_id , take = 10 , skip = 0 ):
2671
2718
return Sca ().get_supply_chain_risks_by_scan_id (scan_id , take = take , skip = skip )
2672
2719
0 commit comments