From 7010ea90e14305837a30764db8a5e4bc1338e378 Mon Sep 17 00:00:00 2001 From: aribeiro Date: Mon, 15 Feb 2021 17:24:11 +0000 Subject: [PATCH] Fix Security Vulnerabilities Issue-ID: SDC-3500 Signed-off-by: aribeiro Change-Id: I3fa2ed2bc3a170d8256fbc91c98bbfbaf5c0a403 --- .../sdc/be/servlets/LifecycleServlet.java | 36 +++++++------- .../sdc/be/servlets/ResourcesServlet.java | 45 +++++++++--------- catalog-ui/src/app/models/components/component.ts | 2 +- .../app/services/components/component-service.ts | 52 ++++++++++++++++----- catalog-ui/src/app/utils/validation-utils.ts | 5 +- .../openecomp/sdc/common/util/ValidationUtils.java | 11 +++++ .../OrchestrationTemplateCandidateImpl.java | 10 ++-- .../OrchestrationTemplateCandidateImplTest.java | 39 ++++++++++++---- .../test/resources/files/sample-not-signed.csar | Bin 0 -> 24874 bytes .../src/test/resources/files/sample-signed.zip | Bin 0 -> 23905 bytes 10 files changed, 133 insertions(+), 67 deletions(-) create mode 100644 openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/test/resources/files/sample-not-signed.csar create mode 100644 openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/test/resources/files/sample-signed.zip diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/LifecycleServlet.java b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/LifecycleServlet.java index f13621ff10..87c890de1b 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/LifecycleServlet.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/LifecycleServlet.java @@ -33,6 +33,18 @@ import io.swagger.v3.oas.annotations.servers.Server; import io.swagger.v3.oas.annotations.servers.Servers; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tags; +import java.io.IOException; +import javax.inject.Inject; +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.Consumes; +import javax.ws.rs.HeaderParam; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; import org.openecomp.sdc.be.components.impl.aaf.AafPermission; import org.openecomp.sdc.be.components.impl.aaf.PermissionAllowed; import org.openecomp.sdc.be.components.lifecycle.LifecycleBusinessLogic; @@ -54,22 +66,10 @@ import org.openecomp.sdc.common.log.elements.LoggerSupportability; import org.openecomp.sdc.common.log.enums.LoggerSupportabilityActions; import org.openecomp.sdc.common.log.enums.StatusCode; import org.openecomp.sdc.common.log.wrappers.Logger; +import org.openecomp.sdc.common.util.ValidationUtils; import org.openecomp.sdc.exception.ResponseFormat; import org.springframework.stereotype.Controller; -import javax.inject.Inject; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.Consumes; -import javax.ws.rs.HeaderParam; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import java.io.IOException; - @Loggable(prepend = true, value = Loggable.DEBUG, trim = false) @Path("/v1/catalog") @Tags({@Tag(name = "SDC Internal APIs")}) @@ -101,9 +101,8 @@ public class LifecycleServlet extends BeGenericServlet { @ApiResponse(responseCode = "409", description = "Resource already exist")}) @PermissionAllowed(AafPermission.PermNames.INTERNAL_ALL_VALUE) public Response changeResourceState( - @Parameter( - description = "LifecycleChangeInfo - relevant for checkin, failCertification, cancelCertification", - required = false) String jsonChangeInfo, + @Parameter(description = "LifecycleChangeInfo - relevant for checkin, failCertification, cancelCertification") + String jsonChangeInfo, @Parameter(description = "validValues: resources / services / products", schema = @Schema(allowableValues = {ComponentTypeEnum.RESOURCE_PARAM_NAME, ComponentTypeEnum.SERVICE_PARAM_NAME, ComponentTypeEnum.PRODUCT_PARAM_NAME})) @PathParam( @@ -116,7 +115,6 @@ public class LifecycleServlet extends BeGenericServlet { @Context final HttpServletRequest request, @Parameter(description = "id of user initiating the operation") @HeaderParam( value = Constants.USER_ID_HEADER) String userId) throws IOException { - String url = request.getMethod() + " " + request.getRequestURI(); log.debug("Start handle request of {}", url); loggerSupportability.log(LoggerSupportabilityActions.CHANGELIFECYCLESTATE, StatusCode.STARTED,"Starting to change lifecycle state to " + lifecycleTransition + " by user " + userId); @@ -143,7 +141,9 @@ public class LifecycleServlet extends BeGenericServlet { try { if (jsonChangeInfo != null && !jsonChangeInfo.isEmpty()) { ObjectMapper mapper = new ObjectMapper(); - changeInfo = new LifecycleChangeInfoWithAction(mapper.readValue(jsonChangeInfo, LifecycleChangeInfoBase.class).getUserRemarks()); + changeInfo = new LifecycleChangeInfoWithAction(mapper + .readValue(ValidationUtils.sanitizeInputString(jsonChangeInfo), LifecycleChangeInfoBase.class) + .getUserRemarks()); } } diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ResourcesServlet.java b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ResourcesServlet.java index 168a70aad2..43fa3786ec 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ResourcesServlet.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ResourcesServlet.java @@ -33,6 +33,25 @@ import io.swagger.v3.oas.annotations.servers.Servers; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tags; import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import javax.inject.Inject; +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.HeaderParam; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; import org.apache.http.HttpStatus; import org.glassfish.jersey.media.multipart.FormDataContentDisposition; import org.glassfish.jersey.media.multipart.FormDataParam; @@ -40,7 +59,6 @@ import org.json.JSONException; import org.json.JSONObject; import org.openecomp.sdc.be.components.impl.ComponentInstanceBusinessLogic; import org.openecomp.sdc.be.components.impl.CsarValidationUtils; -import org.openecomp.sdc.be.components.impl.ElementBusinessLogic; import org.openecomp.sdc.be.components.impl.ImportUtils; import org.openecomp.sdc.be.components.impl.ResourceBusinessLogic; import org.openecomp.sdc.be.components.impl.ResourceImportManager; @@ -67,30 +85,11 @@ import org.openecomp.sdc.common.log.elements.LoggerSupportability; import org.openecomp.sdc.common.log.enums.LoggerSupportabilityActions; import org.openecomp.sdc.common.log.enums.StatusCode; import org.openecomp.sdc.common.log.wrappers.Logger; +import org.openecomp.sdc.common.util.ValidationUtils; import org.openecomp.sdc.common.zip.exception.ZipException; import org.openecomp.sdc.exception.ResponseFormat; import org.springframework.stereotype.Controller; -import javax.inject.Inject; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.HeaderParam; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import java.io.IOException; -import java.util.List; -import java.util.Map; - @Loggable(prepend = true, value = Loggable.DEBUG, trim = false) @Path("/v1/catalog") @Tags({@Tag(name = "SDC Internal APIs")}) @@ -582,12 +581,12 @@ public class ResourcesServlet extends AbstractValidationsServlet { try { Either eitherResource = - resourceBusinessLogic.getLatestResourceFromCsarUuid(csarUUID, user); + resourceBusinessLogic.getLatestResourceFromCsarUuid(ValidationUtils.sanitizeInputString(csarUUID), user); // validate response if (eitherResource.isRight()) { log.debug("failed to get resource from csarUuid : {}", csarUUID); - response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), eitherResource.right().value()); + response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT), eitherResource.right().value()); } else { Object representation = RepresentationUtils.toRepresentation(eitherResource.left().value()); response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), representation); diff --git a/catalog-ui/src/app/models/components/component.ts b/catalog-ui/src/app/models/components/component.ts index 1d48151be8..f787142460 100644 --- a/catalog-ui/src/app/models/components/component.ts +++ b/catalog-ui/src/app/models/components/component.ts @@ -247,7 +247,7 @@ export abstract class Component implements IComponent { let onError = (error:any):void => { deferred.reject(error); }; - this.componentService.changeLifecycleState(this, state, JSON.stringify(commentObj)).then(onSuccess, onError); + this.componentService.changeLifecycleState(this, state, commentObj).then(onSuccess, onError); return deferred.promise; }; diff --git a/catalog-ui/src/app/services/components/component-service.ts b/catalog-ui/src/app/services/components/component-service.ts index f22562f439..47eec26a77 100644 --- a/catalog-ui/src/app/services/components/component-service.ts +++ b/catalog-ui/src/app/services/components/component-service.ts @@ -19,8 +19,25 @@ */ 'use strict'; import * as _ from "lodash"; -import {ArtifactModel, IFileDownload, InstancesInputsPropertiesMap, InputModel, IValidate, RelationshipModel, PropertyModel, Component, ComponentInstance, - AttributeModel, IAppConfigurtaion, Resource, Module, DisplayModule, ArtifactGroupModel, InputsAndProperties} from "app/models"; +import { + ArtifactModel, + IFileDownload, + InstancesInputsPropertiesMap, + InputModel, + IValidate, + RelationshipModel, + PropertyModel, + Component, + ComponentInstance, + AttributeModel, + IAppConfigurtaion, + Resource, + Module, + DisplayModule, + ArtifactGroupModel, + InputsAndProperties, + AsdcComment +} from "app/models"; import {ComponentInstanceFactory, CommonUtils} from "app/utils"; import {SharingService} from "app/services-ng2"; import {ComponentMetadata} from "../../models/component-metadata"; @@ -29,7 +46,7 @@ export interface IComponentService { getComponent(id:string); updateComponent(component:Component):ng.IPromise; - changeLifecycleState(component:Component, state:string, userRemarks:any):ng.IPromise ; + changeLifecycleState(component:Component, state:string, userRemarks:AsdcComment):ng.IPromise ; validateName(newName:string, subtype?:string):ng.IPromise; createComponent(component:Component):ng.IPromise; //importComponent @@ -233,15 +250,28 @@ export class ComponentService implements IComponentService { return deferred.promise; }; - public changeLifecycleState = (component:Component, state:string, userRemarks:any):ng.IPromise => { + public changeLifecycleState = (component:Component, state:string, commentObj:AsdcComment):ng.IPromise => { let deferred = this.$q.defer(); - this.restangular.one(component.uniqueId).one(state).customPOST(userRemarks).then((response:ComponentMetadata) => { - this.sharingService.addUuidValue(response.uniqueId, response.uuid); - let component:ComponentMetadata = new ComponentMetadata().deserialize(response); - deferred.resolve(component); - }, (err)=> { - deferred.reject(err); - }); + let headerObj = {}; + if (commentObj.userRemarks) { + headerObj = this.getHeaderMd5(commentObj); + this.restangular.one(component.uniqueId).one(state).customPOST(JSON.stringify(commentObj), '', {}, headerObj) + .then((response:ComponentMetadata) => { + this.sharingService.addUuidValue(response.uniqueId, response.uuid); + let component:ComponentMetadata = new ComponentMetadata().deserialize(response); + deferred.resolve(component); + }, (err)=> { + deferred.reject(err); + }); + } else { + this.restangular.one(component.uniqueId).one(state).customPOST().then((response:ComponentMetadata) => { + this.sharingService.addUuidValue(response.uniqueId, response.uuid); + let component:ComponentMetadata = new ComponentMetadata().deserialize(response); + deferred.resolve(component); + }, (err)=> { + deferred.reject(err); + }); + } return deferred.promise; }; diff --git a/catalog-ui/src/app/utils/validation-utils.ts b/catalog-ui/src/app/utils/validation-utils.ts index b7e43f79ba..bcb49d8b89 100644 --- a/catalog-ui/src/app/utils/validation-utils.ts +++ b/catalog-ui/src/app/utils/validation-utils.ts @@ -64,7 +64,10 @@ export class ValidationUtils { if (!text) { return null; } - return text.replace(/\s+/g, ' ').replace(/%[A-Fa-f0-9]{2}/g, '').trim(); + return text.replace(/\s+/g, ' ').replace(/%[A-Fa-f0-9]{2}/g, '') + .replace(/&/g, "&").replace(/>/g, ">") + .replace(/ { diff --git a/common-app-api/src/main/java/org/openecomp/sdc/common/util/ValidationUtils.java b/common-app-api/src/main/java/org/openecomp/sdc/common/util/ValidationUtils.java index 375f041e81..1a9cb26a0f 100644 --- a/common-app-api/src/main/java/org/openecomp/sdc/common/util/ValidationUtils.java +++ b/common-app-api/src/main/java/org/openecomp/sdc/common/util/ValidationUtils.java @@ -585,4 +585,15 @@ public class ValidationUtils { public static boolean validateForwardingPathNamePattern(String forwardingPathName) { return FORWARDING_PATH_NAME_PATTERN.matcher(forwardingPathName).matches(); } + + public static String sanitizeInputString(String input) { + if (StringUtils.isNotEmpty(input)) { + input = ValidationUtils.removeNoneUtf8Chars(input); + input = ValidationUtils.removeHtmlTags(input); + input = ValidationUtils.normaliseWhitespace(input); + input = ValidationUtils.stripOctets(input); + } + return input; + } + } diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateImpl.java index 073400fd68..b393153ece 100644 --- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateImpl.java +++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateImpl.java @@ -1,6 +1,7 @@ /* * Copyright © 2016-2018 European Support Limited * Copyright © 2021 Nokia + * Copyright © 2021 Nordix Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,6 +33,7 @@ import java.util.Optional; import javax.activation.DataHandler; import javax.inject.Named; import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; import org.apache.commons.lang3.tuple.Pair; import org.apache.cxf.jaxrs.ext.multipart.Attachment; import org.openecomp.sdc.activitylog.ActivityLogManager; @@ -39,6 +41,7 @@ import org.openecomp.sdc.activitylog.ActivityLogManagerFactory; import org.openecomp.sdc.activitylog.dao.type.ActivityLogEntity; import org.openecomp.sdc.activitylog.dao.type.ActivityType; import org.openecomp.sdc.common.errors.Messages; +import org.openecomp.sdc.common.util.ValidationUtils; import org.openecomp.sdc.common.utils.SdcCommon; import org.openecomp.sdc.datatypes.error.ErrorLevel; import org.openecomp.sdc.datatypes.error.ErrorMessage; @@ -100,13 +103,13 @@ public class OrchestrationTemplateCandidateImpl implements OrchestrationTemplate final Attachment fileToUpload, final String user) { final byte[] fileToUploadBytes = fileToUpload.getObject(byte[].class); final DataHandler dataHandler = fileToUpload.getDataHandler(); - final String filename = dataHandler.getName(); + final String filename = ValidationUtils.sanitizeInputString(dataHandler.getName()); final OnboardingPackageProcessor onboardingPackageProcessor = new OnboardingPackageProcessor(filename, fileToUploadBytes); if (onboardingPackageProcessor.hasErrors()) { final UploadFileResponseDto uploadFileResponseDto = buildUploadResponseWithError(onboardingPackageProcessor.getErrorMessages().toArray(new ErrorMessage[0])); - return Response.ok(uploadFileResponseDto).build(); + return Response.status(Status.NOT_ACCEPTABLE).entity(uploadFileResponseDto).build(); } final OnboardPackageInfo onboardPackageInfo = onboardingPackageProcessor.getOnboardPackageInfo().orElse(null); @@ -117,7 +120,8 @@ public class OrchestrationTemplateCandidateImpl implements OrchestrationTemplate return Response.ok(uploadFileResponseDto).build(); } - final VspDetails vspDetails = new VspDetails(vspId, new Version(versionId)); + final VspDetails vspDetails = new VspDetails(ValidationUtils.sanitizeInputString(vspId), + new Version(ValidationUtils.sanitizeInputString(versionId))); return processOnboardPackage(onboardPackageInfo, vspDetails); } diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/test/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateImplTest.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/test/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateImplTest.java index dec6342cb8..41891dea74 100644 --- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/test/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateImplTest.java +++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/test/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateImplTest.java @@ -22,16 +22,21 @@ package org.openecomp.sdcrests.vsp.rest.services; import static junit.framework.TestCase.assertEquals; import static junit.framework.TestCase.assertFalse; +import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.MockitoAnnotations.initMocks; import static org.mockito.Mockito.when; import java.io.IOException; +import java.net.URL; import java.util.Arrays; +import java.util.Objects; import java.util.Optional; import java.util.UUID; import javax.activation.DataHandler; import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.tuple.Pair; import org.apache.cxf.jaxrs.ext.multipart.Attachment; import org.apache.cxf.jaxrs.ext.multipart.ContentDisposition; @@ -135,32 +140,46 @@ public class OrchestrationTemplateCandidateImplTest { @Test public void uploadSignedTest() { - Response response = orchestrationTemplateCandidate.upload("1", "1", mockAttachment("filename.zip"), "1"); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); + Response response = orchestrationTemplateCandidate + .upload("1", "1", mockAttachment("filename.zip", this.getClass().getResource("/files/sample-signed.zip")), + "1"); + assertEquals(Status.OK.getStatusCode(), response.getStatus()); + assertTrue(((UploadFileResponseDto) response.getEntity()).getErrors().isEmpty()); } @Test - public void uploadNotSignedTest(){ - Response response = orchestrationTemplateCandidate.upload("1", "1", mockAttachment("filename.csar"), "1"); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); + public void uploadNotSignedTest() { + Response response = orchestrationTemplateCandidate.upload("1", "1", + mockAttachment("filename.csar", this.getClass().getResource("/files/sample-not-signed.csar")), "1"); + assertEquals(Status.OK.getStatusCode(), response.getStatus()); + assertTrue(((UploadFileResponseDto) response.getEntity()).getErrors().isEmpty()); } - private Attachment mockAttachment(final String fileName) { + private Attachment mockAttachment(final String fileName, final URL fileToUpload) { final Attachment attachment = Mockito.mock(Attachment.class); when(attachment.getContentDisposition()).thenReturn(new ContentDisposition("test")); final DataHandler dataHandler = Mockito.mock(DataHandler.class); when(dataHandler.getName()).thenReturn(fileName); when(attachment.getDataHandler()).thenReturn(dataHandler); - final byte[] bytes = "upload package Test".getBytes(); + byte[] bytes = "upload package Test".getBytes(); + if (Objects.nonNull(fileToUpload)) { + try { + bytes = IOUtils.toByteArray(fileToUpload); + } catch (final IOException e) { + logger.error("unexpected exception", e); + Assert.fail("Not able to convert file to byte array"); + } + } when(attachment.getObject(ArgumentMatchers.any())).thenReturn(bytes); return attachment; } @Test public void uploadSignNotValidTest() { - Response response = orchestrationTemplateCandidate.upload("1", "1", mockAttachment("filename.zip"), "1"); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); - assertFalse(((UploadFileResponseDto)response.getEntity()).getErrors().isEmpty()); + Response response = orchestrationTemplateCandidate + .upload("1", "1", mockAttachment("filename.zip", null), "1"); + assertEquals(Status.NOT_ACCEPTABLE.getStatusCode(), response.getStatus()); + assertFalse(((UploadFileResponseDto) response.getEntity()).getErrors().isEmpty()); } @Test diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/test/resources/files/sample-not-signed.csar b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/test/resources/files/sample-not-signed.csar new file mode 100644 index 0000000000000000000000000000000000000000..e4e60b26d18a903067758c5fa3e6b1a668ba23dd GIT binary patch literal 24874 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 literal 0 HcmV?d00001 diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/test/resources/files/sample-signed.zip b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/test/resources/files/sample-signed.zip new file mode 100644 index 0000000000000000000000000000000000000000..fecb45aaafc52eda8a78d9e646cf9e4366808f6f GIT binary patch literal 23905 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 riT|Rk|M>y`*