use of com.mercedesbenz.sechub.sereco.metadata.SerecoWeb in project sechub by mercedes-benz.
the class AssertVulnerabilities method assertWebRequest.
public static void assertWebRequest(SerecoVulnerability toInspect, SerecoWebRequest expectedRequest) {
SerecoWeb vulnerabilityWeb = toInspect.getWeb();
if (vulnerabilityWeb == null) {
fail("vulnerability web is null!");
}
SerecoWebRequest foundRequest = vulnerabilityWeb.getRequest();
if (!expectedRequest.equals(foundRequest)) {
SerecoWebBody body1 = expectedRequest.getBody();
SerecoWebBody body2 = foundRequest.getBody();
internalAssertEquals(expectedRequest.getHeaders(), foundRequest.getHeaders(), "headers not as expected");
internalAssertEquals(body1, body2, "body not as expected");
fail("not equal but not detectable");
}
}
use of com.mercedesbenz.sechub.sereco.metadata.SerecoWeb in project sechub by mercedes-benz.
the class SarifV1JSONImporter method resolveWebInfoFromResult.
private SerecoWeb resolveWebInfoFromResult(Result result) {
SerecoWeb serecoWeb = new SerecoWeb();
handleWebRequest(result, serecoWeb);
handleWebResponse(result, serecoWeb);
handleWebAttack(result, serecoWeb);
return serecoWeb;
}
use of com.mercedesbenz.sechub.sereco.metadata.SerecoWeb in project sechub by mercedes-benz.
the class SerecoFalsePositiveWebScanStrategy method isFalsePositive.
/**
* Checks if given vulnerability is identified as false positive by given meta
* data
*
* @param vulnerability
* @param metaData
* @return <code>true</code> when identified as false positive
*/
public boolean isFalsePositive(SerecoVulnerability vulnerability, FalsePositiveMetaData metaData) {
notNull(vulnerability, " vulnerability may not be null");
notNull(metaData, " metaData may not be null");
/* check supported scan type */
if (metaData.getScanType() != ScanType.WEB_SCAN) {
return false;
}
if (vulnerability.getScanType() != ScanType.WEB_SCAN) {
return false;
}
SerecoWeb vulnerabilityWeb = vulnerability.getWeb();
if (vulnerabilityWeb == null) {
LOG.error("Cannot check web vulnerability for false positives when vulnerability data has no web parts!");
return false;
}
FalsePositiveWebMetaData metaDataWeb = metaData.getWeb();
if (metaDataWeb == null) {
LOG.error("Cannot check web vulnerability for false positives when meta data has no web parts!");
return false;
}
/* ---------------------------------------------------- */
/* -------------------CWE ID--------------------------- */
/* ---------------------------------------------------- */
/* for web scans we only use CWE as wellknown common identifier */
Integer cweId = metaData.getCweId();
if (cweId == null) {
LOG.error("Cannot check web vulnerability for false positives web code meta data has no CWE id set!");
return false;
}
SerecoClassification serecoClassification = vulnerability.getClassification();
String serecoCWE = serecoClassification.getCwe();
if (serecoCWE == null || serecoCWE.isEmpty()) {
LOG.error("Code scan sereco vulnerability type:{} found without CWE! Cannot determin false positive! Classification was:{}", vulnerability.getType(), serecoClassification);
return false;
}
try {
int serecoCWEint = Integer.parseInt(serecoCWE);
if (cweId.intValue() != serecoCWEint) {
/* not same type of common vulnerability enumeration - so skip */
return false;
}
} catch (NumberFormatException e) {
LOG.error("Code scan sereco vulnerability type:{} found CWE:{} but not expected integer format!", vulnerability.getType(), serecoCWE);
return false;
}
boolean sameData = true;
/* ---------------------------------------------------- */
/* -------------------NetworkTarget--------------------------- */
/* ---------------------------------------------------- */
String metaTarget = metaDataWeb.getRequest().getTarget();
String vulnerabilityTarget = vulnerabilityWeb.getRequest().getTarget();
sameData = sameData && SimpleStringUtils.isTrimmedEqual(metaTarget, vulnerabilityTarget);
/* ---------------------------------------------------- */
/* -------------------HTTP Method---------------------- */
/* ---------------------------------------------------- */
String metaMethod = metaDataWeb.getRequest().getMethod();
String vulnerabilityMethod = vulnerabilityWeb.getRequest().getMethod();
sameData = sameData && SimpleStringUtils.isTrimmedEqual(metaMethod, vulnerabilityMethod);
/* ---------------------------------------------------- */
/* -------------------Attack vector-------------------- */
/* ---------------------------------------------------- */
String metaAttackVector = metaDataWeb.getRequest().getAttackVector();
SerecoWebAttack attack = vulnerabilityWeb.getAttack();
String vulnerabilityAttackVector = attack.getVector();
sameData = sameData && SimpleStringUtils.isTrimmedEqual(metaAttackVector, vulnerabilityAttackVector);
/* ---------------------------------------------------- */
/* -------------------Evidence------------------------- */
/* ---------------------------------------------------- */
String metaEvidence = metaDataWeb.getResponse().getEvidence();
SerecoWebEvidence evidence = attack.getEvidence();
String vulnerabilityEvidence = null;
if (evidence != null) {
vulnerabilityEvidence = evidence.getSnippet();
}
sameData = sameData && SimpleStringUtils.isTrimmedEqual(metaEvidence, vulnerabilityEvidence);
return sameData;
}
use of com.mercedesbenz.sechub.sereco.metadata.SerecoWeb in project sechub by mercedes-benz.
the class SerecoProductResultTransformer method appendWebData.
private void appendWebData(UUID sechubJobUUID, SerecoVulnerability vulnerability, SecHubFinding finding) {
SecHubReportWeb sechubWeb = new SecHubReportWeb();
SecHubReportWebRequest sechubRequest = sechubWeb.getRequest();
SerecoWeb serecoWeb = vulnerability.getWeb();
if (serecoWeb == null) {
LOG.error("Web scan, but vulnerability has no web object inside - must skip finding {} for report with uuid=", finding.getId(), sechubJobUUID);
return;
}
/* request */
SerecoWebRequest serecoRequest = serecoWeb.getRequest();
sechubRequest.setProtocol(serecoRequest.getProtocol());
sechubRequest.setVersion(serecoRequest.getVersion());
sechubRequest.setTarget(serecoRequest.getTarget());
sechubRequest.setMethod(serecoRequest.getMethod());
sechubRequest.getHeaders().putAll(serecoRequest.getHeaders());
sechubRequest.getBody().setText(serecoRequest.getBody().getText());
sechubRequest.getBody().setBinary(serecoRequest.getBody().getBinary());
/* response */
SerecoWebResponse serecoResponse = serecoWeb.getResponse();
SecHubReportWebResponse sechubResponse = sechubWeb.getResponse();
sechubResponse.setStatusCode(serecoResponse.getStatusCode());
sechubResponse.setReasonPhrase(serecoResponse.getReasonPhrase());
sechubResponse.setProtocol(serecoResponse.getProtocol());
sechubResponse.setVersion(serecoResponse.getVersion());
sechubResponse.getHeaders().putAll(serecoResponse.getHeaders());
sechubResponse.getBody().setText(serecoResponse.getBody().getText());
sechubResponse.getBody().setBinary(serecoResponse.getBody().getBinary());
/* attack */
SerecoWebAttack serecoAttack = serecoWeb.getAttack();
SecHubReportWebAttack sechubAttack = sechubWeb.getAttack();
sechubAttack.setVector(serecoAttack.getVector());
SerecoWebEvidence serecoEvidence = serecoAttack.getEvidence();
if (serecoEvidence != null) {
SecHubReportWebEvidence sechubEvidence = new SecHubReportWebEvidence();
sechubEvidence.setSnippet(serecoEvidence.getSnippet());
SerecoWebBodyLocation serecoBodyLocation = serecoEvidence.getBodyLocation();
if (serecoBodyLocation != null) {
SecHubReportWebBodyLocation sechubBodyLocation = new SecHubReportWebBodyLocation();
sechubBodyLocation.setStartLine((serecoBodyLocation.getStartLine()));
sechubEvidence.setBodyLocation(sechubBodyLocation);
}
sechubAttack.setEvidence(sechubEvidence);
}
finding.setWeb(sechubWeb);
}
use of com.mercedesbenz.sechub.sereco.metadata.SerecoWeb in project sechub by mercedes-benz.
the class NetsparkerV1XMLImporter method importResult.
public SerecoMetaData importResult(String xml) throws IOException {
SerecoMetaData metaData = new SerecoMetaData();
if (xml == null) {
xml = "";
}
Document document;
try {
document = DocumentHelper.parseText(xml);
} catch (DocumentException e) {
throw new IOException("Import cannot parse xml", e);
}
Element netsparkerCloudElement = document.getRootElement();
Element vulnerabilitiesElement = netsparkerCloudElement.element("vulnerabilities");
if (vulnerabilitiesElement == null) {
throw new IllegalStateException("no vulnerabilities element found!");
}
Iterator<Element> it = vulnerabilitiesElement.elementIterator();
while (it.hasNext()) {
Element vulnerabilityElement = it.next();
SerecoVulnerability vulnerability = new SerecoVulnerability();
metaData.getVulnerabilities().add(vulnerability);
vulnerability.setSeverity(NetsparkerServerityConverter.convert(vulnerabilityElement.elementText("severity")));
String targetUrl = vulnerabilityElement.elementText("url");
SerecoWeb web = new SerecoWeb();
// at least we set the target URL. Other parts like evidence etc. are currently
web.getRequest().setTarget(targetUrl);
// missing
vulnerability.setWeb(web);
vulnerability.setType(vulnerabilityElement.elementText("type"));
vulnerability.setDescription(NetsparkerHtmlToAsciiDocConverter.convert(vulnerabilityElement.elementText("description")));
vulnerability.setScanType(ScanType.WEB_SCAN);
Element classificationElement = vulnerabilityElement.element("classification");
if (classificationElement == null) {
throw new IllegalStateException("no classificaton element found!");
}
SerecoClassification classification = vulnerability.getClassification();
classification.setOwasp(classificationElement.elementText("owasp"));
classification.setWasc(classificationElement.elementText("wasc"));
classification.setCwe(classificationElement.elementText("cwe"));
classification.setCapec(classificationElement.elementText("capec"));
classification.setPci31(classificationElement.elementText("pci31"));
classification.setPci32(classificationElement.elementText("pci32"));
classification.setHipaa(classificationElement.elementText("hipaa"));
classification.setOwaspProactiveControls(classificationElement.elementText("owasppc"));
}
return metaData;
}
Aggregations