Skip to content

Commit f5186ec

Browse files
nicolstfcomte
authored andcommitted
Fix command injection vulnerability in HelmInstallService
1 parent ab4808f commit f5186ec

3 files changed

Lines changed: 10 additions & 2 deletions

File tree

helm-wrapper/src/main/java/io/github/inseefrlab/helmwrapper/service/HelmInstallService.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ public class HelmInstallService {
2828
private static final Logger LOGGER = LoggerFactory.getLogger(HelmInstallService.class);
2929
private final Pattern helmNamePattern =
3030
Pattern.compile("^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$");
31+
private final Pattern semverPattern =
32+
Pattern.compile(
33+
"^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$");
3134

3235
private final HelmReleaseInfoParser helmReleaseInfoParser = new HelmReleaseInfoParser();
3336
private static final String VALUES_INFO_TYPE = "values";
@@ -173,6 +176,10 @@ public HelmInstaller installChart(
173176
command.append("-n ");
174177
safeConcat(command, namespace);
175178
if (StringUtils.isNotBlank(version)) {
179+
if (!semverPattern.matcher(version).matches()) {
180+
throw new IllegalArgumentException(
181+
"Invalid release version " + version + ", must be a SemVer 2 string");
182+
}
176183
command.append(" --version ");
177184
safeConcat(command, version);
178185
}

onyxia-api/src/main/java/fr/insee/onyxia/api/controller/api/mylab/MyLabController.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,8 @@ private Collection<Object> publishApps(
524524

525525
Pkg pkg =
526526
catalog.getCatalog()
527-
.getPackageByName(requestDTO.getPackageName())
527+
.getPackageByNameAndVersion(
528+
requestDTO.getPackageName(), requestDTO.getPackageVersion())
528529
.orElseThrow(NotFoundException::new);
529530

530531
Map<String, Object> fusion = new HashMap<>();

onyxia-api/src/main/java/fr/insee/onyxia/api/services/impl/HelmAppsService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public Collection<Object> installApp(
119119
catalogId + "/" + pkg.getName(),
120120
namespaceId,
121121
requestDTO.getName(),
122-
requestDTO.getPackageVersion(),
122+
pkg.getVersion(),
123123
requestDTO.isDryRun(),
124124
values,
125125
null,

0 commit comments

Comments
 (0)