Skip to content

Commit a7d036a

Browse files
fix: resolve CVE and log injection (#23)
Co-authored-by: Vitolo-Andrea <[email protected]>
1 parent 1cc6736 commit a7d036a

File tree

10 files changed

+82
-56
lines changed

10 files changed

+82
-56
lines changed

.grype.yaml

+4-1
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,7 @@ ignore:
77
- vulnerability: CVE-2023-3635 # okio-jvm 3.9.0
88
- vulnerability: CVE-2023-51074 # json-path 2.9.0
99
- vulnerability: CVE-2024-26308 # commons-compress 1.26.2
10-
- vulnerability: CVE-2024-25710 # commons-compress 1.26.2
10+
- vulnerability: CVE-2024-25710 # commons-compress 1.26.2
11+
- vulnerability: CVE-2023-43642 # snappy-java 1.1.10.5
12+
- vulnerability: CVE-2023-34455 # snappy-java 1.1.10.5
13+
- vulnerability: CVE-2024-22271 # spring-cloud-function-context 4.1.2

pom.xml

+10
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,16 @@
161161
<type>pom</type>
162162
<scope>import</scope>
163163
</dependency>
164+
<dependency>
165+
<groupId>org.xerial.snappy</groupId>
166+
<artifactId>snappy-java</artifactId>
167+
<version>1.1.10.5</version>
168+
</dependency>
169+
<dependency>
170+
<groupId>org.springframework.cloud</groupId>
171+
<artifactId>spring-cloud-function-context</artifactId>
172+
<version>4.1.2</version>
173+
</dependency>
164174
</dependencies>
165175
</dependencyManagement>
166176

src/main/java/it/gov/pagopa/common/utils/Utils.java

+9
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,13 @@ public static String createSHA256(String fiscalCode) {
2929
throw new EmdEncryptionException("Something went wrong creating SHA256",true,e);
3030
}
3131
}
32+
33+
public static void logInfo(String message){
34+
log.info(inputSanify(message));
35+
}
36+
private static String inputSanify(String message){
37+
if (message != null)
38+
return message.replaceAll("[\\r\\n]", "");
39+
return "[EMD][WARNING] Null log";
40+
}
3241
}

src/main/java/it/gov/pagopa/message/core/event/producer/MessageErrorProducer.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package it.gov.pagopa.message.core.event.producer;
22

33
import it.gov.pagopa.message.core.dto.MessageDTO;
4-
import lombok.extern.slf4j.Slf4j;
54
import org.springframework.beans.factory.annotation.Value;
65
import org.springframework.cloud.stream.function.StreamBridge;
76
import org.springframework.messaging.Message;
@@ -10,8 +9,9 @@
109
import java.util.concurrent.ScheduledExecutorService;
1110
import java.util.concurrent.TimeUnit;
1211

12+
import static it.gov.pagopa.common.utils.Utils.logInfo;
13+
1314
@Component
14-
@Slf4j
1515
public class MessageErrorProducer {
1616

1717
private final String binder;
@@ -27,7 +27,7 @@ public MessageErrorProducer(StreamBridge streamBridge,
2727
}
2828

2929
public void sendToMessageErrorQueue(Message<MessageDTO> message){
30-
log.info("Scheduling message to queue");
30+
logInfo("Scheduling message to queue");
3131
scheduler.schedule(
3232
() -> streamBridge.send("messageSender-out-0", binder, message),
3333
5,

src/main/java/it/gov/pagopa/message/core/service/ChannelServiceImpl.java

+10-10
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
import it.gov.pagopa.message.core.model.Channel;
99
import it.gov.pagopa.message.core.model.mapper.ChannelMapperDTOToObject;
1010
import it.gov.pagopa.message.core.repository.ChannelRepository;
11-
import lombok.extern.slf4j.Slf4j;
1211
import org.springframework.stereotype.Service;
1312

1413
import java.time.LocalDateTime;
1514
import java.util.Optional;
1615

16+
import static it.gov.pagopa.common.utils.Utils.logInfo;
17+
1718
@Service
18-
@Slf4j
1919
public class ChannelServiceImpl implements ChannelService {
2020

2121
private final ChannelRepository channelRepository;
@@ -31,46 +31,46 @@ public ChannelServiceImpl(ChannelRepository channelRepository, ChannelMapperObje
3131

3232
@Override
3333
public ChannelDTO createChannel(ChannelDTO channelDTO) {
34-
log.info("[EMD][CREATE-CHANNEL] Received message: {}",channelDTO.toString());
34+
logInfo("[EMD][CREATE-CHANNEL] Received message: %s".formatted(channelDTO.toString()));
3535
Channel channel = mapperToObject.channelDTOMapper(channelDTO);
3636
channel.setCreationDate(LocalDateTime.now());
3737
channel.setLastUpdateDate(LocalDateTime.now());
3838
channel = channelRepository.save(channel);
39-
log.info("[EMD][CREATE-CHANNEL] Created");
39+
logInfo("[EMD][CREATE-CHANNEL] Created");
4040
return mapperToDTO.channelMapper(channel);
4141
}
4242

4343

4444
@Override
4545
public ChannelDTO deleteChannel(String channelId) {
46-
log.info("[EMD][DELETE-CHANNEL] Received channelId {} ", channelId);
46+
logInfo("[EMD][DELETE-CHANNEL] Received channelId %s ".formatted(channelId));
4747
Optional<Channel> optionalChannel = channelRepository.findById(channelId);
4848
if (optionalChannel.isPresent()) {
4949
Channel channel = optionalChannel.get();
5050
channel.setState(false);
5151
channel.setLastUpdateDate(LocalDateTime.now());
5252
channelRepository.save(channel);
53-
log.info("[EMD][CREATE-CHANNEL] Deleted");
53+
logInfo("[EMD][CREATE-CHANNEL] Deleted");
5454
return mapperToDTO.channelMapper(channel);
5555
} else {
56-
log.error("[EMD][DELETE-CHANNEL] Tpp not onboarded");
56+
logInfo("[EMD][DELETE-CHANNEL] Tpp not onboarded");
5757
throw new TppNotOnboardedException("Tpp not onboarded", true, null);
5858
}
5959
}
6060

6161
@Override
6262
public ChannelDTO updateChannel(String channelId) {
63-
log.info("[EMD][UPDATE-CHANNEL] Received channelId {} ", channelId);
63+
logInfo("[EMD][UPDATE-CHANNEL] Received channelId %s ".formatted(channelId));
6464
Optional<Channel> optionalChannel = channelRepository.findById(channelId);
6565
if (optionalChannel.isPresent()) {
6666
Channel channel = optionalChannel.get();
6767
channel.setState(true);
6868
channel.setLastUpdateDate(LocalDateTime.now());
6969
channelRepository.save(channel);
70-
log.info("[EMD][CREATE-CHANNEL] Updated");
70+
logInfo("[EMD][CREATE-CHANNEL] Updated");
7171
return mapperToDTO.channelMapper(channel);
7272
} else {
73-
log.error("[EMD][UPDATE-CHANNEL] Tpp not onboarded");
73+
logInfo("[EMD][UPDATE-CHANNEL] Tpp not onboarded");
7474
throw new TppNotOnboardedException("Tpp not onboarded", true, null);
7575
}
7676

src/main/java/it/gov/pagopa/message/core/service/CitizenServiceImpl.java

+10-10
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
import it.gov.pagopa.message.core.model.CitizenConsent;
99
import it.gov.pagopa.message.core.model.mapper.CitizenConsentMapperDTOToObject;
1010
import it.gov.pagopa.message.core.repository.CitizenRepository;
11-
import lombok.extern.slf4j.Slf4j;
1211
import org.springframework.stereotype.Service;
1312

1413
import java.time.LocalDateTime;
1514

15+
import static it.gov.pagopa.common.utils.Utils.logInfo;
16+
1617

1718
@Service
18-
@Slf4j
1919
public class CitizenServiceImpl implements CitizenService{
2020

2121
private final CitizenRepository citizenRepository;
@@ -31,47 +31,47 @@ public CitizenServiceImpl(CitizenRepository citizenRepository, CitizenConsentMap
3131

3232
@Override
3333
public CitizenConsentDTO createCitizenConsent(CitizenConsentDTO citizenConsentDTO) {
34-
log.info("[EMD][CREATE-CITIZEN-CONSENT] Received message: {}",citizenConsentDTO.toString());
34+
logInfo("[EMD][CREATE-CITIZEN-CONSENT] Received message: %s".formatted(citizenConsentDTO.toString()));
3535
CitizenConsent citizenConsent = mapperToObject.citizenConsentDTOMapper(citizenConsentDTO);
3636
String hashedFiscalCode = Utils.createSHA256(citizenConsent.getHashedFiscalCode());
3737
citizenConsent.setHashedFiscalCode(hashedFiscalCode);
3838
citizenConsent.setCreationDate(LocalDateTime.now());
3939
citizenConsent.setLastUpdateDate(LocalDateTime.now());
4040
citizenConsent = citizenRepository.save(citizenConsent);
41-
log.info("[EMD][CREATE-CITIZEN-CONSENT] Created");
41+
logInfo("[EMD][CREATE-CITIZEN-CONSENT] Created");
4242
return mapperToDTO.citizenConsentMapper(citizenConsent);
4343
}
4444

4545

4646
@Override
4747
public CitizenConsentDTO deleteCitizenConsent(String fiscalCode, String channelId) {
48-
log.info("[EMD][DELETE-CITIZEN-CONSENT] Received hashedFiscalCode: {} and channelId {} ",fiscalCode, channelId);
48+
logInfo("[EMD][DELETE-CITIZEN-CONSENT] Received hashedFiscalCode: %s and channelId %s ".formatted(fiscalCode, channelId));
4949
String hashedFiscalCode = Utils.createSHA256(fiscalCode);
5050
CitizenConsent citizenConsent = citizenRepository.findByHashedFiscalCodeAndChannelId(hashedFiscalCode,channelId);
5151
if(citizenConsent == null) {
52-
log.error("[EMD][DELETE-CITIZEN-CONSENT] User not onboarded");
52+
logInfo("[EMD][DELETE-CITIZEN-CONSENT] User not onboarded");
5353
throw new UserNotOnboardedException("User not onboarded", true, null);
5454
}
5555
citizenConsent.setChannelState(false);
5656
citizenConsent.setLastUpdateDate(LocalDateTime.now());
5757
citizenRepository.save(citizenConsent);
58-
log.info("[EMD][DELETE-CITIZEN-CONSENT] Deleted");
58+
logInfo("[EMD][DELETE-CITIZEN-CONSENT] Deleted");
5959
return mapperToDTO.citizenConsentMapper(citizenConsent);
6060
}
6161

6262
@Override
6363
public CitizenConsentDTO updateCitizenConsent(String fiscalCode, String channelId) {
64-
log.info("[EMD][UPDATE-CITIZEN-CONSENT] Received fiscalCode: {} and channelId {} ",fiscalCode, channelId);
64+
logInfo("[EMD][UPDATE-CITIZEN-CONSENT] Received fiscalCode: %s and channelId %s ".formatted(fiscalCode, channelId));
6565
fiscalCode = Utils.createSHA256(fiscalCode);
6666
CitizenConsent citizenConsent = citizenRepository.findByHashedFiscalCodeAndChannelId(fiscalCode,channelId);
6767
if(citizenConsent == null) {
68-
log.error("[EMD][UPDATE-CITIZEN-CONSENT] User not onboarded");
68+
logInfo("[EMD][UPDATE-CITIZEN-CONSENT] User not onboarded");
6969
throw new UserNotOnboardedException("User not onboarded", true, null);
7070
}
7171
citizenConsent.setChannelState(true);
7272
citizenConsent.setLastUpdateDate(LocalDateTime.now());
7373
citizenRepository.save(citizenConsent);
74-
log.info("[EMD][UPDATE-CITIZEN-CONSENT] Updated");
74+
logInfo("[EMD][UPDATE-CITIZEN-CONSENT] Updated");
7575
return mapperToDTO.citizenConsentMapper(citizenConsent);
7676
}
7777

src/main/java/it/gov/pagopa/message/core/service/MessageCoreServiceImpl.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
import it.gov.pagopa.message.core.model.Channel;
99
import it.gov.pagopa.message.core.model.CitizenConsent;
1010
import it.gov.pagopa.message.core.dto.Outcome;
11-
import lombok.extern.slf4j.Slf4j;
1211
import org.springframework.stereotype.Service;
1312
import java.util.ArrayList;
1413
import java.util.Iterator;
1514
import java.util.List;
1615

16+
import static it.gov.pagopa.common.utils.Utils.logInfo;
17+
1718

18-
@Slf4j
1919
@Service
2020
public class MessageCoreServiceImpl implements MessageCoreService {
2121

@@ -35,17 +35,17 @@ public MessageCoreServiceImpl(CitizenConnectorImpl citizenService,
3535
@Override
3636
public Outcome sendMessage(MessageDTO messageDTO) {
3737

38-
log.info("[EMD][SEND-MESSAGE] Recived message: {}",messageDTO);
38+
logInfo("[EMD][SEND-MESSAGE] Recived message: %s".formatted(messageDTO));
3939
String hashedFiscalCode = Utils.createSHA256(messageDTO.getRecipientId());
4040
ArrayList<CitizenConsent> citizenConsentList =
4141
citizenService.getCitizenConsentsEnabled(hashedFiscalCode);
4242

4343
if(citizenConsentList.isEmpty()) {
44-
log.info("[EMD][SEND-MESSAGE] Citizen consent list is empty");
44+
logInfo("[EMD][SEND-MESSAGE] Citizen consent list is empty");
4545
return new Outcome(OutcomeStatus.NO_CHANNELS_ENABLED);
4646
}
4747

48-
log.info("[EMD][SEND-MESSAGE] Citizen consent list: {}",citizenConsentList);
48+
logInfo("[EMD][SEND-MESSAGE] Citizen consent list: %s".formatted(citizenConsentList));
4949
List<Channel> channelList = tppService.getChannelsList(
5050
citizenConsentList
5151
.stream()
@@ -54,17 +54,17 @@ public Outcome sendMessage(MessageDTO messageDTO) {
5454
);
5555

5656
if(channelList.isEmpty()) {
57-
log.info("[EMD][SEND-MESSAGE] Channel list is empty");
57+
logInfo("[EMD][SEND-MESSAGE] Channel list is empty");
5858
return new Outcome(OutcomeStatus.NO_CHANNELS_ENABLED);
5959
}
60-
log.info("[EMD][SEND-MESSAGE] Channel list: {}",channelList);
60+
logInfo("[EMD][SEND-MESSAGE] Channel list: %s".formatted(channelList));
6161

6262
for (CitizenConsent citizenConsent : citizenConsentList) {
6363
Iterator<Channel> iterator = channelList.iterator();
6464
while (iterator.hasNext()) {
6565
Channel channel = iterator.next();
6666
if (channel.getId().equals(citizenConsent.getChannelId())) {
67-
log.info("[EMD][SEND-MESSAGE] Channel: {}",channel.getBusinessName());
67+
logInfo("[EMD][SEND-MESSAGE] Channel: %s".formatted(channel.getBusinessName()));
6868
sendMessageServiceImpl.sendMessage(
6969
messageDTO,
7070
channel.getMessageUrl(),

src/main/java/it/gov/pagopa/message/core/service/MessageErrorConsumerServiceImpl.java

+4-5
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import it.gov.pagopa.common.utils.Constants;
44
import it.gov.pagopa.message.core.dto.MessageDTO;
55

6-
import lombok.extern.slf4j.Slf4j;
76

87
import org.springframework.beans.factory.annotation.Value;
98
import org.springframework.messaging.MessageHeaders;
@@ -13,10 +12,10 @@
1312

1413
import static it.gov.pagopa.common.utils.Constants.ERROR_MSG_AUTH_URL;
1514
import static it.gov.pagopa.common.utils.Constants.ERROR_MSG_MESSAGE_URL;
15+
import static it.gov.pagopa.common.utils.Utils.logInfo;
1616

1717

1818
@Service
19-
@Slf4j
2019
public class MessageErrorConsumerServiceImpl implements MessageErrorConsumerService {
2120

2221
private final SendMessageServiceImpl sendMessageServiceImpl;
@@ -30,18 +29,18 @@ public MessageErrorConsumerServiceImpl(SendMessageServiceImpl sendMessageService
3029

3130
@Override
3231
public void processCommand(Message<MessageDTO> message) {
33-
log.info("[EMD-PROCESS-COMMAND] Queue message received: {}",message.getPayload());
32+
logInfo("[EMD-PROCESS-COMMAND] Queue message received: %s".formatted(message.getPayload()));
3433
MessageHeaders headers = message.getHeaders();
3534
long retry = getNextRetry(headers);
3635
if(retry!=0) {
37-
log.info("[EMD-PROCESS-COMMAND] Try: {}",retry);
36+
logInfo("[EMD-PROCESS-COMMAND] Try: %s".formatted(retry));
3837
MessageDTO messageDTO = message.getPayload();
3938
String messageUrl = (String) headers.get(ERROR_MSG_MESSAGE_URL);
4039
String authenticationUrl = (String) headers.get(ERROR_MSG_AUTH_URL);
4140
sendMessageServiceImpl.sendMessage(messageDTO, messageUrl, authenticationUrl, retry);
4241
}
4342
else
44-
log.info("[EMD-PROCESS-COMMAND] Not retryable");
43+
logInfo("[EMD-PROCESS-COMMAND] Not retryable");
4544
}
4645

4746
private long getNextRetry(MessageHeaders headers) {

0 commit comments

Comments
 (0)