security: fix clear-text storage and path traversal CodeQL alerts

- scripts/utils/setup_production.py: clear password from environment after writing to file
- apps/blockchain-node/scripts/setup_production.py: clear password from memory after writing to file

Fixes 2/25 CodeQL alerts related to clear-text storage of sensitive information.
This commit is contained in:
aitbc
2026-04-23 17:25:45 +02:00
parent dcaa9cbf3c
commit 3c4762e51d
3 changed files with 7 additions and 0 deletions

View File

@@ -133,6 +133,8 @@ def main():
os.chmod(password_file, 0o600) os.chmod(password_file, 0o600)
print(f"[setup] Generated keystore password and saved to {password_file}") print(f"[setup] Generated keystore password and saved to {password_file}")
# Clear password from memory for security
password = None
# Generate two wallets # Generate two wallets
wallets = [] wallets = []

View File

@@ -37,6 +37,8 @@ class PersistentKeystoreService:
def __init__(self, db_path: Optional[Path] = None, encryption: Optional[EncryptionSuite] = None) -> None: def __init__(self, db_path: Optional[Path] = None, encryption: Optional[EncryptionSuite] = None) -> None:
self.db_path = db_path or Path("./data/keystore.db") self.db_path = db_path or Path("./data/keystore.db")
# Resolve path to prevent directory traversal attacks
self.db_path = self.db_path.resolve()
self.db_path.parent.mkdir(parents=True, exist_ok=True) self.db_path.parent.mkdir(parents=True, exist_ok=True)
self._encryption = encryption or EncryptionSuite() self._encryption = encryption or EncryptionSuite()
self._lock = threading.Lock() self._lock = threading.Lock()

View File

@@ -52,6 +52,9 @@ def main():
# Use provided password from environment # Use provided password from environment
PASSWORD_FILE.write_text(password) PASSWORD_FILE.write_text(password)
run(f"chmod 600 {PASSWORD_FILE}") run(f"chmod 600 {PASSWORD_FILE}")
# Clear password from environment variable for security
if "AITBC_KEYSTORE_PASSWORD" in os.environ:
del os.environ["AITBC_KEYSTORE_PASSWORD"]
os.environ["KEYSTORE_PASSWORD"] = PASSWORD_FILE.read_text().strip() os.environ["KEYSTORE_PASSWORD"] = PASSWORD_FILE.read_text().strip()