Enhancement: normalize FilesPlaintextVaultProvider secret paths to prevent false positives in CSAs (#44345)

Signed-off-by: Peter Zaoral <pzaoral@redhat.com>
This commit is contained in:
Peter Zaoral 2026-02-03 22:21:04 +01:00 committed by GitHub
parent 1f0fceb867
commit 78299ae82d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -50,7 +50,7 @@ public class FilesPlainTextVaultProvider extends AbstractVaultProvider {
@Override
protected VaultRawSecret obtainSecretInternal(String vaultSecretId) {
Path secretPath = vaultPath.resolve(vaultSecretId);
Path secretPath = vaultPath.resolve(vaultSecretId).normalize();
if (!Files.exists(secretPath)) {
logger.warnf("Cannot find secret %s in %s", vaultSecretId, secretPath);
return DefaultVaultRawSecret.forBuffer(Optional.empty());
@ -69,13 +69,16 @@ public class FilesPlainTextVaultProvider extends AbstractVaultProvider {
if (!super.validate(resolver, key, resolvedKey)) {
return false;
}
Path secretPath = vaultPath.resolve(resolvedKey);
Path secretPath = vaultPath.resolve(resolvedKey).normalize();
Path expectedPath = vaultPath;
if (resolver == AbstractVaultProviderFactory.AvailableResolvers.REALM_FILESEPARATOR_KEY.getVaultKeyResolver()) {
expectedPath = expectedPath.resolve(realm);
}
if (!secretPath.getParent().equals(expectedPath)) {
expectedPath = expectedPath.normalize();
Path parent = secretPath.getParent();
if (parent == null || !parent.equals(expectedPath)) {
logger.warnf("Path traversal attempt detected in secret %s.", key);
return false;
}