Skip to content

Commit 36c05be

Browse files
authored
Merge pull request #7 from RegioneER/versamento-fascicolo-v3-1.6.0_410327
Release 1.6.0
2 parents fff0e4a + 8b2ffb1 commit 36c05be

267 files changed

Lines changed: 15184 additions & 15823 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11

2+
## 1.6.0 (18-11-2025)
3+
4+
### Novità: 1
5+
- [#39124](https://parermine.regione.emilia-romagna.it/issues/39124) Patch di sicurezza per interventi legati a CVE
6+
27
## 1.5.1 (18-09-2025)
38

49
### Bugfix: 1

CONTAINER-SCAN-REPORT.md

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
## Container scan evidence CVE
22
<strong>Image name:</strong> registry.ente.regione.emr.it/parer/okd/versamento-fascicolo-v3:sast
3-
<br/><strong>Run date:</strong> Thu Sep 18 11:28:26 CEST 2025
4-
<br/><strong>Produced by:</strong> <a href="https://gitlab.ente.regione.emr.it/parer/okd/versamento-fascicolo-v3/-/jobs/753236">Job</a>
5-
<br/><strong>CVE founded:</strong> 5
3+
<br/><strong>Run date:</strong> Tue Nov 18 16:56:33 CET 2025
4+
<br/><strong>Produced by:</strong> <a href="https://gitlab.ente.regione.emr.it/parer/okd/versamento-fascicolo-v3/-/jobs/815726">Job</a>
5+
<br/><strong>CVE founded:</strong> 2
66
| CVE | Description | Severity | Solution |
77
|:---:|:---|:---:|:---|
8-
| [CVE-2025-58060](https://access.redhat.com/errata/RHSA-2025:15702)|OpenPrinting CUPS is an open source printing system for Linux and other Unix-like operating systems. In versions 2.4.12 and earlier, when the `AuthType` is set to anything but `Basic`, if the request contains an `Authorization: Basic ...` header, the password is not checked. This results in authentication bypass. Any configuration that allows an `AuthType` that is not `Basic` is affected. Version 2.4.13 fixes the issue.|High|Upgrade cups-libs to 1:2.2.6-63.el8_10|
9-
| [CVE-2025-59375](https://access.redhat.com/security/cve/CVE-2025-59375)|libexpat in Expat before 2.7.2 allows attackers to trigger large dynamic memory allocations via a small document that is submitted for parsing.|High|No solution provided|
10-
| [CVE-2025-5914](https://access.redhat.com/errata/RHSA-2025:14130)|A vulnerability has been identified in the libarchive library, specifically within the archive_read_format_rar_seek_data() function. This flaw involves an integer overflow that can ultimately lead to a double-free condition. Exploiting a double-free vulnerability can result in memory corruption, enabling an attacker to execute arbitrary code or cause a denial-of-service condition.|High|Upgrade libarchive to 3.3.3-6.el8_10|
11-
| [CVE-2025-7425](https://access.redhat.com/errata/RHSA-2025:12447)|A flaw was found in libxslt where the attribute type, atype, flags are modified in a way that corrupts internal memory management. When XSLT functions, such as the key() process, result in tree fragments, this corruption prevents the proper cleanup of ID attributes. As a result, the system may access freed memory, causing crashes or enabling attackers to trigger heap corruption.|High|Upgrade libxml2 to 2.9.7-21.el8_10.2|
12-
| [CVE-2025-6965](https://access.redhat.com/errata/RHSA-2025:11992)|There exists a vulnerability in SQLite versions before 3.50.2 where the number of aggregate terms could exceed the number of columns available. This could lead to a memory corruption issue. We recommend upgrading to version 3.50.2 or above.|High|Upgrade sqlite-libs to 3.26.0-20.el8_10|
8+
| [CVE-2025-59375](http://www.openwall.com/lists/oss-security/2025/09/16/2)|libexpat in Expat before 2.7.2 allows attackers to trigger large dynamic memory allocations via a small document that is submitted for parsing.|High|No solution provided|
9+
| [CVE-2025-12863](https://access.redhat.com/security/cve/CVE-2025-12863)|A flaw was found in the xmlSetTreeDoc() function of the libxml2 XML parsing library. This function is responsible for updating document pointers when XML nodes are moved between documents. Due to improper handling of namespace references, a namespace pointer may remain linked to a freed memory region when the original document is destroyed. As a result, subsequent operations that access the namespace can lead to a use-after-free condition, causing an application crash.|High|No solution provided|

RELEASE-NOTES.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## 1.5.1 (18-09-2025)
1+
## 1.6.0 (18-11-2025)
22

3-
### Bugfix: 1
4-
- [#35929](https://parermine.regione.emilia-romagna.it/issues/35929) Correzione errore imprevisto che si verifica nella gestione degli attributi dei dati specifici fascicoli
3+
### Novità: 1
4+
- [#39124](https://parermine.regione.emilia-romagna.it/issues/39124) Patch di sicurezza per interventi legati a CVE

pom.xml

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,22 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
33
<modelVersion>4.0.0</modelVersion>
4+
<artifactId>versamento-fascicolo-v3</artifactId>
5+
<version>1.6.1-SNAPSHOT</version>
6+
<name>Versamento Fascicolo 3.0</name>
7+
<description>Progetto versamento-fascicolo-v3</description>
8+
49
<parent>
510
<groupId>it.eng.parer</groupId>
611
<artifactId>parer-pom</artifactId>
7-
<version>7.1.2</version>
12+
<version>7.1.3</version>
813
</parent>
9-
<artifactId>versamento-fascicolo-v3</artifactId>
10-
<version>1.5.2-SNAPSHOT</version>
11-
<name>Versamento Fascicolo 3.0</name>
12-
<description>Progetto versamento-fascicolo-v3</description>
14+
1315
<scm>
1416
<developerConnection>scm:git:https://github.com/RegioneER/parer-versamento-fascicolo-v3.git</developerConnection>
1517
<tag>versamento-fascicolo-v3-1.5.0</tag>
1618
</scm>
19+
1720
<distributionManagement>
1821
<repository>
1922
<id>github</id>
@@ -27,25 +30,20 @@
2730
<url>https://maven.pkg.github.com/RegioneER/parer-framework-parerpom</url>
2831
</repository>
2932
</repositories>
33+
3034
<properties>
3135
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
3236
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
3337
<maven.compiler.release>21</maven.compiler.release>
3438
<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
3539
<quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
36-
<quarkus.platform.version>3.21.0</quarkus.platform.version>
40+
<quarkus.platform.version>3.28.4</quarkus.platform.version>
3741
<xmlsec.version>4.0.2</xmlsec.version>
38-
<surefire-plugin.version>3.5.2</surefire-plugin.version>
42+
<surefire-plugin.version>3.5.4</surefire-plugin.version>
3943
<osgi.version>2.0.0</osgi.version>
4044
<dom4j.version>2.1.3</dom4j.version>
4145
<!-- commons -->
42-
<commons-text.version>1.13.0</commons-text.version>
43-
<commons-codec.version>1.18.0</commons-codec.version>
44-
<commons-lang3.version>3.17.0</commons-lang3.version>
45-
<commons-compress.version>1.27.1</commons-compress.version>
46-
<commons-io.version>2.18.0</commons-io.version>
47-
<commons-collections4.version>4.5.0-M3</commons-collections4.version>
48-
<commons-net.version>3.11.1</commons-net.version>
46+
<commons-collections4.version>4.5.0</commons-collections4.version>
4947
<quarkus.custom.log.version>1.3.0</quarkus.custom.log.version>
5048
<jandex-maven-plugin.version>1.2.3</jandex-maven-plugin.version>
5149
<jaxb2-maven-plugin.version>3.2.0</jaxb2-maven-plugin.version>
@@ -147,10 +145,6 @@
147145
<groupId>io.quarkus</groupId>
148146
<artifactId>quarkus-hibernate-validator</artifactId>
149147
</dependency>
150-
<dependency>
151-
<groupId>io.quarkus</groupId>
152-
<artifactId>quarkus-security-jpa</artifactId>
153-
</dependency>
154148
<dependency>
155149
<groupId>io.quarkus</groupId>
156150
<artifactId>quarkus-arc</artifactId>
@@ -231,10 +225,6 @@
231225
<groupId>io.quarkus</groupId>
232226
<artifactId>quarkus-smallrye-health</artifactId>
233227
</dependency>
234-
<dependency>
235-
<groupId>io.quarkus</groupId>
236-
<artifactId>quarkus-logging-json</artifactId>
237-
</dependency>
238228
<!-- security with token -->
239229
<dependency>
240230
<groupId>io.quarkus</groupId>

src/main/docker/Dockerfile.jvm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@
7777
# accessed directly. (example: "foo.example.com,bar.example.com")
7878
#
7979
###
80-
FROM registry.access.redhat.com/ubi8/openjdk-21:1.21
80+
FROM registry.access.redhat.com/ubi9/openjdk-21:1.23
8181

8282
# This is a custom layer
8383
# Add layer with extra certification authorities certificates

src/main/java/it/eng/parer/fascicolo/beans/AppServerInstance.java

Lines changed: 106 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -51,132 +51,132 @@ public class AppServerInstance {
5151

5252
@PostConstruct
5353
protected void initSingleton() {
54-
try {
55-
log.atInfo().log("Inizializzazione singleton AppServerInstance...");
56-
InetAddress address = this.getMyHostAddress();
54+
try {
55+
log.atInfo().log("Inizializzazione singleton AppServerInstance...");
56+
InetAddress address = this.getMyHostAddress();
5757

58-
log.atInfo().log("Indirizzo IP del server: {}", address.getHostAddress());
59-
log.atInfo().log(" Nome del server: {}", address.getCanonicalHostName());
58+
log.atInfo().log("Indirizzo IP del server: {}", address.getHostAddress());
59+
log.atInfo().log(" Nome del server: {}", address.getCanonicalHostName());
6060

61-
log.atInfo().log("Instance UUID: {}", instanceUUID);
61+
log.atInfo().log("Instance UUID: {}", instanceUUID);
6262

63-
servername = address.getCanonicalHostName() + "/" + instanceUUID;
64-
log.atInfo().log("Il nome completo dell'istanza in esecuzione è {}", servername);
63+
servername = address.getCanonicalHostName() + "/" + instanceUUID;
64+
log.atInfo().log("Il nome completo dell'istanza in esecuzione è {}", servername);
6565

66-
} catch (UnknownHostException ex) {
67-
throw new AppGenericRuntimeException(ex, ErrorCategory.INTERNAL_ERROR);
68-
}
66+
} catch (UnknownHostException ex) {
67+
throw new AppGenericRuntimeException(ex, ErrorCategory.INTERNAL_ERROR);
68+
}
6969
}
7070

7171
@Lock(value = Type.READ)
7272
public String getName() {
73-
return servername;
73+
return servername;
7474
}
7575

7676
enum AddressTypes {
77-
// l'ordine di scelta dovrebbe essere quello che segue:
78-
// priorità ai nomi host, poi gli ipv4, poi gli ipv6.
79-
// nell'elenco sono presenti anche i due tipi di indirizzi di loopback
80-
// così che nel caso pessimo sia reso preferibilmente
81-
// l'indirizzo IPV4. (nel caso di questi due ultimi tipi di
82-
// indirizzo il nome host non è critico)
83-
// tendenzialmente è meglio un site local di un ip pubblico.
84-
// per capire se un ip ha un nome, verifico se questo è diverso dalla
85-
// rappresentazione in stringa delll'ip. (non molto bello, in effetti)
86-
SITE_LOCAL_WITH_NAME, NON_SITE_LOCAL_WITH_NAME, SITE_LOCAL_WITHOUT_NAME_IPV4,
87-
NON_SITE_LOCAL_WITHOUT_NAME_IPV4, SITE_LOCAL_WITHOUT_NAME_IPV6,
88-
NON_SITE_LOCAL_WITHOUT_NAME_IPV6, LOOPBACK_IPV4, LOOPBACK_IPV6
77+
// l'ordine di scelta dovrebbe essere quello che segue:
78+
// priorità ai nomi host, poi gli ipv4, poi gli ipv6.
79+
// nell'elenco sono presenti anche i due tipi di indirizzi di loopback
80+
// così che nel caso pessimo sia reso preferibilmente
81+
// l'indirizzo IPV4. (nel caso di questi due ultimi tipi di
82+
// indirizzo il nome host non è critico)
83+
// tendenzialmente è meglio un site local di un ip pubblico.
84+
// per capire se un ip ha un nome, verifico se questo è diverso dalla
85+
// rappresentazione in stringa delll'ip. (non molto bello, in effetti)
86+
SITE_LOCAL_WITH_NAME, NON_SITE_LOCAL_WITH_NAME, SITE_LOCAL_WITHOUT_NAME_IPV4,
87+
NON_SITE_LOCAL_WITHOUT_NAME_IPV4, SITE_LOCAL_WITHOUT_NAME_IPV6,
88+
NON_SITE_LOCAL_WITHOUT_NAME_IPV6, LOOPBACK_IPV4, LOOPBACK_IPV6
8989
}
9090

9191
private InetAddress getMyHostAddress() throws UnknownHostException {
92-
try {
93-
Map<AddressTypes, InetAddress> map = new EnumMap<>(AddressTypes.class);
94-
95-
// Nota se falliscono tutti questi tentativi la macchina è
96-
// probabilmente disconnessa dalla rete
97-
//
98-
// Scorri su tutte le interfacce di rete
99-
for (Enumeration<?> ifaces = NetworkInterface.getNetworkInterfaces(); ifaces
100-
.hasMoreElements();) {
101-
NetworkInterface iface = (NetworkInterface) ifaces.nextElement();
102-
// Scorri su tutti gli indirizzi IP associati ad una scheda di rete
103-
for (Enumeration<InetAddress> inetAddrs = iface.getInetAddresses(); inetAddrs
104-
.hasMoreElements();) {
105-
InetAddress inetAddr = inetAddrs.nextElement();
106-
log.atDebug().log("Verifico l'indirizzo {}", inetAddr.getHostAddress());
107-
AddressTypes tipo = decodeAddrType(inetAddr);
108-
// se è già presente un indirizzo di questo tipo (per esempio se
109-
// ci sono più schede di rete fisiche) lo sovrascrivo. Di fatto prendo
110-
// l'ultimo che leggo.
111-
map.put(tipo, inetAddr);
112-
}
113-
}
114-
115-
// l'enum viene letto nell'ordine in cui è stato dichiarato,
116-
// garantendo la preferenza nella scelta del tipo di indirizzo reso
117-
for (AddressTypes at : AddressTypes.values()) {
118-
if (map.get(at) != null) {
119-
log.atInfo().log("Ho selezionato l'indirizzo di tipo {}", at);
120-
return map.get(at);
121-
}
122-
}
123-
124-
// A questo punto, non siamo riusciti a determinare un indirizzo plausibile
125-
// Ripieghiamo usando l'API del JDK sperando che il risultato non sia
126-
// del tutto inutile (sotto Linux la cosa è frequente)
127-
InetAddress jdkSuppliedAddress = InetAddress.getLocalHost();
128-
if (jdkSuppliedAddress == null) {
129-
throw new UnknownHostException(
130-
"Il metodo JDK InetAddress.getLocalHost() ha reso null.");
131-
}
132-
return jdkSuppliedAddress;
133-
} catch (Exception e) {
134-
UnknownHostException unknownHostException = new UnknownHostException(
135-
"Impossibile determinare un indirizzo per la macchina: " + e);
136-
unknownHostException.initCause(e);
137-
throw unknownHostException;
138-
}
92+
try {
93+
Map<AddressTypes, InetAddress> map = new EnumMap<>(AddressTypes.class);
94+
95+
// Nota se falliscono tutti questi tentativi la macchina è
96+
// probabilmente disconnessa dalla rete
97+
//
98+
// Scorri su tutte le interfacce di rete
99+
for (Enumeration<?> ifaces = NetworkInterface.getNetworkInterfaces(); ifaces
100+
.hasMoreElements();) {
101+
NetworkInterface iface = (NetworkInterface) ifaces.nextElement();
102+
// Scorri su tutti gli indirizzi IP associati ad una scheda di rete
103+
for (Enumeration<InetAddress> inetAddrs = iface.getInetAddresses(); inetAddrs
104+
.hasMoreElements();) {
105+
InetAddress inetAddr = inetAddrs.nextElement();
106+
log.atDebug().log("Verifico l'indirizzo {}", inetAddr.getHostAddress());
107+
AddressTypes tipo = decodeAddrType(inetAddr);
108+
// se è già presente un indirizzo di questo tipo (per esempio se
109+
// ci sono più schede di rete fisiche) lo sovrascrivo. Di fatto prendo
110+
// l'ultimo che leggo.
111+
map.put(tipo, inetAddr);
112+
}
113+
}
114+
115+
// l'enum viene letto nell'ordine in cui è stato dichiarato,
116+
// garantendo la preferenza nella scelta del tipo di indirizzo reso
117+
for (AddressTypes at : AddressTypes.values()) {
118+
if (map.get(at) != null) {
119+
log.atInfo().log("Ho selezionato l'indirizzo di tipo {}", at);
120+
return map.get(at);
121+
}
122+
}
123+
124+
// A questo punto, non siamo riusciti a determinare un indirizzo plausibile
125+
// Ripieghiamo usando l'API del JDK sperando che il risultato non sia
126+
// del tutto inutile (sotto Linux la cosa è frequente)
127+
InetAddress jdkSuppliedAddress = InetAddress.getLocalHost();
128+
if (jdkSuppliedAddress == null) {
129+
throw new UnknownHostException(
130+
"Il metodo JDK InetAddress.getLocalHost() ha reso null.");
131+
}
132+
return jdkSuppliedAddress;
133+
} catch (Exception e) {
134+
UnknownHostException unknownHostException = new UnknownHostException(
135+
"Impossibile determinare un indirizzo per la macchina: " + e);
136+
unknownHostException.initCause(e);
137+
throw unknownHostException;
138+
}
139139
}
140140

141141
private AddressTypes decodeAddrType(InetAddress inetAddress) {
142-
AddressTypes tipo;
143-
if (!inetAddress.isLoopbackAddress()) {
144-
if (inetAddress.isSiteLocalAddress()) {
145-
if (isAddressWithHostName(inetAddress)) {
146-
tipo = AddressTypes.SITE_LOCAL_WITH_NAME;
147-
} else if (inetAddress instanceof Inet4Address) {
148-
tipo = AddressTypes.SITE_LOCAL_WITHOUT_NAME_IPV4;
149-
} else {
150-
tipo = AddressTypes.SITE_LOCAL_WITHOUT_NAME_IPV6;
151-
}
152-
} else {
153-
if (isAddressWithHostName(inetAddress)) {
154-
tipo = AddressTypes.NON_SITE_LOCAL_WITH_NAME;
155-
} else if (inetAddress instanceof Inet4Address) {
156-
tipo = AddressTypes.NON_SITE_LOCAL_WITHOUT_NAME_IPV4;
157-
} else {
158-
tipo = AddressTypes.NON_SITE_LOCAL_WITHOUT_NAME_IPV6;
159-
}
160-
}
161-
log.atDebug().log("è un indirizzo {}", tipo);
162-
} else {
163-
// non mi interessa se questo indirizzo di loopback ha un nome:
164-
// nella maggior parte dei casi si chiama "localhost".
165-
// questa discriminazione viene fatta solo per dare
166-
// priorità nella selezione all'indirizzio ipv4
167-
// rispetto a quello ipv6
168-
if (inetAddress instanceof Inet4Address) {
169-
tipo = AddressTypes.LOOPBACK_IPV4;
170-
} else {
171-
tipo = AddressTypes.LOOPBACK_IPV6;
172-
}
173-
log.atDebug().log("è un indirizzo di loopback di tipo {}", tipo);
174-
}
175-
return tipo;
142+
AddressTypes tipo;
143+
if (!inetAddress.isLoopbackAddress()) {
144+
if (inetAddress.isSiteLocalAddress()) {
145+
if (isAddressWithHostName(inetAddress)) {
146+
tipo = AddressTypes.SITE_LOCAL_WITH_NAME;
147+
} else if (inetAddress instanceof Inet4Address) {
148+
tipo = AddressTypes.SITE_LOCAL_WITHOUT_NAME_IPV4;
149+
} else {
150+
tipo = AddressTypes.SITE_LOCAL_WITHOUT_NAME_IPV6;
151+
}
152+
} else {
153+
if (isAddressWithHostName(inetAddress)) {
154+
tipo = AddressTypes.NON_SITE_LOCAL_WITH_NAME;
155+
} else if (inetAddress instanceof Inet4Address) {
156+
tipo = AddressTypes.NON_SITE_LOCAL_WITHOUT_NAME_IPV4;
157+
} else {
158+
tipo = AddressTypes.NON_SITE_LOCAL_WITHOUT_NAME_IPV6;
159+
}
160+
}
161+
log.atDebug().log("è un indirizzo {}", tipo);
162+
} else {
163+
// non mi interessa se questo indirizzo di loopback ha un nome:
164+
// nella maggior parte dei casi si chiama "localhost".
165+
// questa discriminazione viene fatta solo per dare
166+
// priorità nella selezione all'indirizzio ipv4
167+
// rispetto a quello ipv6
168+
if (inetAddress instanceof Inet4Address) {
169+
tipo = AddressTypes.LOOPBACK_IPV4;
170+
} else {
171+
tipo = AddressTypes.LOOPBACK_IPV6;
172+
}
173+
log.atDebug().log("è un indirizzo di loopback di tipo {}", tipo);
174+
}
175+
return tipo;
176176
}
177177

178178
private boolean isAddressWithHostName(InetAddress inetAddress) {
179-
return !inetAddress.getHostName().equals(inetAddress.getHostAddress());
179+
return !inetAddress.getHostName().equals(inetAddress.getHostAddress());
180180
}
181181

182182
}

0 commit comments

Comments
 (0)