From 85456ebf3a0677ad4b7ce8915906896d730bf456 Mon Sep 17 00:00:00 2001 From: Bailey Taylor Date: Wed, 24 Sep 2025 04:08:55 +0000 Subject: [PATCH] Initial commit --- .gitattributes | 3 + .gitignore | 37 + build.gradle | 70 + cert3.pem | 23 + cert_STAR-PSG-NET-AU/cert2.pem | 22 + cert_STAR-PSG-NET-AU/chain2.pem | 26 + cert_STAR-PSG-NET-AU/fullchain2.pem | 48 + cert_STAR-PSG-NET-AU/privkey2.pem | 6 + chain3.pem | 26 + cve-sync.log | 112 + fullchain3.pem | 49 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43453 bytes gradle/wrapper/gradle-wrapper.properties | 7 + gradlew | 249 + gradlew.bat | 92 + package-lock.json | 702 ++ package.json | 19 + privkey3.pem | 6 + scripts/.enrichment_resume | 1 + scripts/.env.local | 7 + scripts/.last_synced_date | 1 + scripts/cve-sync.log | 48 + scripts/enrichCVE_MSRC.js | 177 + scripts/fetchCVE.js | 208 + scripts/fetchCVE_v2.js | 457 ++ scripts/fetchCVE_withMORE.js | 298 + scripts/fetchKEV.js | 79 + scripts/fetchMSRC.js | 193 + scripts/kev-sync.log | 5 + scripts/msrc-sync.log | 6978 +++++++++++++++++ scripts/runSpringSync_Manual.js | 13 + settings.gradle | 1 + .../dl_sysinfo_server/Application.java | 15 + .../dl_sysinfo_server/auth/Authenticated.java | 12 + .../auth/AuthenticatedData.java | 22 + .../config/CaptchaConfig.java | 34 + .../dl_sysinfo_server/config/Config.java | 36 + .../config/JacksonConfig.java | 20 + .../dl_sysinfo_server/config/LogLevel.java | 20 + .../config/LoggerConfig.java | 16 + .../dl_sysinfo_server/config/MySQLConfig.java | 52 + .../dl_sysinfo_server/config/PingToggle.java | 16 + .../controller/ActionType.java | 6 + .../controller/AdminController.java | 120 + .../controller/AuthController.java | 180 + .../controller/HealthCheckController.java | 42 + .../controller/ManagementController.java | 17 + .../controller/PublicGuestSiteController.java | 33 + .../controller/RegisterController.java | 73 + .../controller/ScriptController.java | 287 + .../controller/TwoFactorController.java | 37 + .../controller/UserProfileController.java | 84 + .../dl_sysinfo_server/db/DatabaseService.java | 41 + .../dl_sysinfo_server/dto/AuthRequest.java | 23 + .../dto/ChangePasswordRequest.java | 25 + .../dl_sysinfo_server/dto/ClientDTO.java | 17 + .../dto/ClientRegisterRequest.java | 11 + .../dl_sysinfo_server/dto/GuestSiteDTO.java | 81 + .../dl_sysinfo_server/dto/LoginResponse.java | 26 + .../dto/PublicGuestSiteDTO.java | 29 + .../dto/TwoFactorRequest.java | 31 + .../dl_sysinfo_server/dto/UserDTO.java | 54 + .../dl_sysinfo_server/dto/UserProfileDTO.java | 61 + .../dto/UserRegisterRequest.java | 15 + .../dl_sysinfo_server/dto/VerifyRequest.java | 13 + .../dl_sysinfo_server/entity/Client.java | 58 + .../dl_sysinfo_server/entity/GuestSite.java | 102 + .../entity/SiteCodeword.java | 31 + .../dl_sysinfo_server/entity/UserAuth.java | 120 + .../dl_sysinfo_server/error/ApiError.java | 19 + .../dl_sysinfo_server/model/LoginRequest.java | 14 + .../repository/ClientRepository.java | 11 + .../repository/GuestSiteRepository.java | 11 + .../repository/SiteCodewordRepository.java | 10 + .../repository/UserAuthRepository.java | 16 + .../security/AuthenticationInfo.java | 29 + .../security/BasicConfiguration.java | 173 + .../security/CurrentUser.java | 20 + .../security/CurrentUserArgumentResolver.java | 30 + .../security/CustomCacheControlFilter.java | 32 + .../security/EncryptionService.java | 80 + .../security/JwtAuthenticationFilter.java | 138 + .../security/JwtToCurrentUserConverter.java | 26 + .../dl_sysinfo_server/security/JwtUtil.java | 146 + .../security/TokenResolver.java | 28 + .../service/ClientService.java | 31 + .../service/EmailService.java | 47 + .../service/GuestSiteService.java | 125 + .../service/TwoFactorAuthService.java | 112 + .../service/UniFiService.java | 56 + .../service/UserService.java | 173 + .../dl_sysinfo_server/util/HashUtil.java | 19 + .../util/NormalizationUtils.java | 50 + src/main/resources/application.properties | 89 + src/main/resources/keystore.p12 | Bin 0 -> 2744 bytes src/main/resources/springboot.p12 | Bin 0 -> 2919 bytes src/main/resources/springboot_OLD.p12 | Bin 0 -> 4047 bytes src/test/java/BcryptTest.java | 13 + src/test/java/GenerateBcryptHash.java | 11 + 99 files changed, 13332 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 build.gradle create mode 100644 cert3.pem create mode 100644 cert_STAR-PSG-NET-AU/cert2.pem create mode 100644 cert_STAR-PSG-NET-AU/chain2.pem create mode 100644 cert_STAR-PSG-NET-AU/fullchain2.pem create mode 100644 cert_STAR-PSG-NET-AU/privkey2.pem create mode 100644 chain3.pem create mode 100644 cve-sync.log create mode 100644 fullchain3.pem create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 privkey3.pem create mode 100644 scripts/.enrichment_resume create mode 100644 scripts/.env.local create mode 100644 scripts/.last_synced_date create mode 100644 scripts/cve-sync.log create mode 100644 scripts/enrichCVE_MSRC.js create mode 100644 scripts/fetchCVE.js create mode 100644 scripts/fetchCVE_v2.js create mode 100644 scripts/fetchCVE_withMORE.js create mode 100644 scripts/fetchKEV.js create mode 100644 scripts/fetchMSRC.js create mode 100644 scripts/kev-sync.log create mode 100644 scripts/msrc-sync.log create mode 100644 scripts/runSpringSync_Manual.js create mode 100644 settings.gradle create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/Application.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/auth/Authenticated.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/auth/AuthenticatedData.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/CaptchaConfig.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/Config.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/JacksonConfig.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/LogLevel.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/LoggerConfig.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/MySQLConfig.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/PingToggle.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/ActionType.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/AdminController.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/AuthController.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/HealthCheckController.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/ManagementController.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/PublicGuestSiteController.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/RegisterController.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/ScriptController.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/TwoFactorController.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/UserProfileController.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/db/DatabaseService.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/AuthRequest.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/ChangePasswordRequest.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/ClientDTO.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/ClientRegisterRequest.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/GuestSiteDTO.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/LoginResponse.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/PublicGuestSiteDTO.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/TwoFactorRequest.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/UserDTO.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/UserProfileDTO.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/UserRegisterRequest.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/VerifyRequest.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/entity/Client.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/entity/GuestSite.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/entity/SiteCodeword.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/entity/UserAuth.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/error/ApiError.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/model/LoginRequest.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/repository/ClientRepository.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/repository/GuestSiteRepository.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/repository/SiteCodewordRepository.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/repository/UserAuthRepository.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/AuthenticationInfo.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/BasicConfiguration.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/CurrentUser.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/CurrentUserArgumentResolver.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/CustomCacheControlFilter.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/EncryptionService.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/JwtAuthenticationFilter.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/JwtToCurrentUserConverter.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/JwtUtil.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/TokenResolver.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/ClientService.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/EmailService.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/GuestSiteService.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/TwoFactorAuthService.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/UniFiService.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/UserService.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/util/HashUtil.java create mode 100644 src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/util/NormalizationUtils.java create mode 100644 src/main/resources/application.properties create mode 100644 src/main/resources/keystore.p12 create mode 100644 src/main/resources/springboot.p12 create mode 100644 src/main/resources/springboot_OLD.p12 create mode 100644 src/test/java/BcryptTest.java create mode 100644 src/test/java/GenerateBcryptHash.java diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8af972c --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +/gradlew text eol=lf +*.bat text eol=crlf +*.jar binary diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2065bc --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..8d6e373 --- /dev/null +++ b/build.gradle @@ -0,0 +1,70 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '3.3.3' + id 'io.spring.dependency-management' version '1.1.6' +} + +group = 'com.psg.ldsysinfo' +version = '0.0.1-SNAPSHOT' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenCentral() +} + +dependencies { + // Spring Boot + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-security' + implementation 'org.springframework.boot:spring-boot-starter-logging' + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-mail' + implementation 'org.springframework.boot:spring-boot-starter-webflux' + implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server' + + // JWT + implementation 'io.jsonwebtoken:jjwt-api:0.11.5' + implementation 'io.jsonwebtoken:jjwt-impl:0.11.5' + implementation 'io.jsonwebtoken:jjwt-jackson:0.11.5' + + // Database + implementation 'mysql:mysql-connector-java:8.0.29' + + // Jackson + Date/Time + implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310' + + // Validation & JAXB (Jakarta & Legacy) + implementation 'jakarta.xml.bind:jakarta.xml.bind-api:3.0.1' + implementation 'javax.xml.bind:jaxb-api:2.3.1' + implementation 'jakarta.validation:jakarta.validation-api:3.0.0' + + // Version comparison + implementation 'org.apache.maven:maven-artifact:3.9.6' + + // Twilio + implementation 'com.twilio.sdk:twilio:9.14.1' + + + // Lombok + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + + // Testing + testImplementation 'org.springframework.boot:spring-boot-starter-test' +} + +// ✅ Ensure resources (like springboot.p12) are available when using `bootRun` +bootRun { + sourceResources sourceSets.main +} diff --git a/cert3.pem b/cert3.pem new file mode 100644 index 0000000..55d496a --- /dev/null +++ b/cert3.pem @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIIDxTCCA0ugAwIBAgISBhz4/YQD6EMezB5EopCan11yMAoGCCqGSM49BAMDMDIx +CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF +NjAeFw0yNTA1MDUwNTUzMzNaFw0yNTA4MDMwNTUzMzJaMBcxFTATBgNVBAMMDCou +cHNnLm5ldC5hdTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJpLCOwSblm5ACILhTab +CcJ33gbdrFPQuFhvyinKWQ9DH+YCD630JX23hpKjsz69H1TrpMgIhQHkEgZEj5Ci +qmqySQmqgKIVoKQKWlGA/UAyDkTwyQP1RruTZnvVAD6/HaOCAj0wggI5MA4GA1Ud +DwEB/wQEAwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0T +AQH/BAIwADAdBgNVHQ4EFgQUYL0bYOh8hJwrdPX1U2xU2Q/2938wHwYDVR0jBBgw +FoAUkydGmAOpUWiOmNbEQkjbI79YlNIwVQYIKwYBBQUHAQEESTBHMCEGCCsGAQUF +BzABhhVodHRwOi8vZTYuby5sZW5jci5vcmcwIgYIKwYBBQUHMAKGFmh0dHA6Ly9l +Ni5pLmxlbmNyLm9yZy8wFwYDVR0RBBAwDoIMKi5wc2cubmV0LmF1MBMGA1UdIAQM +MAowCAYGZ4EMAQIBMC4GA1UdHwQnMCUwI6AhoB+GHWh0dHA6Ly9lNi5jLmxlbmNy +Lm9yZy8xMTUuY3JsMIIBAwYKKwYBBAHWeQIEAgSB9ASB8QDvAHYADeHyMCvTDcFA +YhIJ6lUu/Ed0fLHX6TDvDkIetH5OqjQAAAGWnzdNfwAABAMARzBFAiEAwLijBIRC +CJOfwuxVFhgUfXd7uCK30uOTYP+RfC9nhr0CIGfHOYsvZHe08QbHafkOzPN6tyRY +L4RKXMAv6JtS+XsAAHUAzPsPaoVxCWX+lZtTzumyfCLphVwNl422qX5UwP5MDbAA +AAGWnzdNlAAABAMARjBEAiArgRGaKdgItURxSHkcHCrx/DZ5pnyUMxLB5Q41BhCk +awIgG407b550tzhr+mvkOI+99cLXAdxabP7Fi2KMhq9Fsv0wCgYIKoZIzj0EAwMD +aAAwZQIxALHo2SGs6E34Q19nu7BFXQq0ccqE2S7Kb8EkxOeTn4Y4xa3M+owUJubH +wxi1cNOeYgIwdx43f6qVT+1BzT3sAkgFMVyDcc8iAaJIDmLv3hxR8WwIwG4h9K9F +QbLJbCSxXSo5 +-----END CERTIFICATE----- diff --git a/cert_STAR-PSG-NET-AU/cert2.pem b/cert_STAR-PSG-NET-AU/cert2.pem new file mode 100644 index 0000000..884d1c1 --- /dev/null +++ b/cert_STAR-PSG-NET-AU/cert2.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDmDCCAx2gAwIBAgISA3cx6pdudinoyNPQQ6tDERv0MAoGCCqGSM49BAMDMDIx +CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF +NjAeFw0yNTAzMDYxNDE2NTJaFw0yNTA2MDQxNDE2NTFaMBcxFTATBgNVBAMMDCou +cHNnLm5ldC5hdTB2MBAGByqGSM49AgEGBSuBBAAiA2IABOG0jKcfM4uf8gGG4/k4 +bCVyivf6p6euAk3gSu3evvIs3YjJK8zlMYZM/YogO+GQxBipRHJ75/j35umpfGMM +TdeIHX1b8BkuxaJM1+OPbEhMcEweRIVihfqCQMi8ogofrqOCAg8wggILMA4GA1Ud +DwEB/wQEAwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0T +AQH/BAIwADAdBgNVHQ4EFgQUNG8CwKH0p/+/ityNnLV5qe1XUMowHwYDVR0jBBgw +FoAUkydGmAOpUWiOmNbEQkjbI79YlNIwVQYIKwYBBQUHAQEESTBHMCEGCCsGAQUF +BzABhhVodHRwOi8vZTYuby5sZW5jci5vcmcwIgYIKwYBBQUHMAKGFmh0dHA6Ly9l +Ni5pLmxlbmNyLm9yZy8wFwYDVR0RBBAwDoIMKi5wc2cubmV0LmF1MBMGA1UdIAQM +MAowCAYGZ4EMAQIBMIIBBQYKKwYBBAHWeQIEAgSB9gSB8wDxAHcAouMK5EXvva2b +fjjtR2d3U9eCW4SU1yteGyzEuVCkR+cAAAGVbAaKcAAABAMASDBGAiEAo1M9qabG +y9ULFqX2f0aSFUEbq4/mxgYMGI8CyRHIMysCIQDKiqjf02C7djRbUXFgY8i525D4 +Dk//piv8x3BVnwFOKAB2AMz7D2qFcQll/pWbU87psnwi6YVcDZeNtql+VMD+TA2w +AAABlWwGktIAAAQDAEcwRQIhAMfWVBUyDceYf5CIOYCWb4jBHw0cDsmpzV2rnLlW ++lYGAiBbBBf1oAiL74wvRoYYHITbUBkJzeiKsdd4QL+g9ITgXDAKBggqhkjOPQQD +AwNpADBmAjEA+2N7kXIuSeR+q48M3ZAddqQ1yKk9epGr/vjn8kAN6kHB18CYZ1IZ +fSS1qzj+GdJ4AjEAmaUjf/N+08nte4SlEo9bl0hszoPZCEEDaorzzZUZZg0rlwtU +TmnpNMRKPWKDDuNZ +-----END CERTIFICATE----- diff --git a/cert_STAR-PSG-NET-AU/chain2.pem b/cert_STAR-PSG-NET-AU/chain2.pem new file mode 100644 index 0000000..65797c8 --- /dev/null +++ b/cert_STAR-PSG-NET-AU/chain2.pem @@ -0,0 +1,26 @@ +-----BEGIN CERTIFICATE----- +MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw +WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg +RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G +h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV +6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw +gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD +ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj +v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB +AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g +BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu +Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc +MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL +pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp +eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH +pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7 +s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu +h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv +YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8 +ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0 +LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+ +EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY +Ig46v9mFmBvyH04= +-----END CERTIFICATE----- diff --git a/cert_STAR-PSG-NET-AU/fullchain2.pem b/cert_STAR-PSG-NET-AU/fullchain2.pem new file mode 100644 index 0000000..30af734 --- /dev/null +++ b/cert_STAR-PSG-NET-AU/fullchain2.pem @@ -0,0 +1,48 @@ +-----BEGIN CERTIFICATE----- +MIIDmDCCAx2gAwIBAgISA3cx6pdudinoyNPQQ6tDERv0MAoGCCqGSM49BAMDMDIx +CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF +NjAeFw0yNTAzMDYxNDE2NTJaFw0yNTA2MDQxNDE2NTFaMBcxFTATBgNVBAMMDCou +cHNnLm5ldC5hdTB2MBAGByqGSM49AgEGBSuBBAAiA2IABOG0jKcfM4uf8gGG4/k4 +bCVyivf6p6euAk3gSu3evvIs3YjJK8zlMYZM/YogO+GQxBipRHJ75/j35umpfGMM +TdeIHX1b8BkuxaJM1+OPbEhMcEweRIVihfqCQMi8ogofrqOCAg8wggILMA4GA1Ud +DwEB/wQEAwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0T +AQH/BAIwADAdBgNVHQ4EFgQUNG8CwKH0p/+/ityNnLV5qe1XUMowHwYDVR0jBBgw +FoAUkydGmAOpUWiOmNbEQkjbI79YlNIwVQYIKwYBBQUHAQEESTBHMCEGCCsGAQUF +BzABhhVodHRwOi8vZTYuby5sZW5jci5vcmcwIgYIKwYBBQUHMAKGFmh0dHA6Ly9l +Ni5pLmxlbmNyLm9yZy8wFwYDVR0RBBAwDoIMKi5wc2cubmV0LmF1MBMGA1UdIAQM +MAowCAYGZ4EMAQIBMIIBBQYKKwYBBAHWeQIEAgSB9gSB8wDxAHcAouMK5EXvva2b +fjjtR2d3U9eCW4SU1yteGyzEuVCkR+cAAAGVbAaKcAAABAMASDBGAiEAo1M9qabG +y9ULFqX2f0aSFUEbq4/mxgYMGI8CyRHIMysCIQDKiqjf02C7djRbUXFgY8i525D4 +Dk//piv8x3BVnwFOKAB2AMz7D2qFcQll/pWbU87psnwi6YVcDZeNtql+VMD+TA2w +AAABlWwGktIAAAQDAEcwRQIhAMfWVBUyDceYf5CIOYCWb4jBHw0cDsmpzV2rnLlW ++lYGAiBbBBf1oAiL74wvRoYYHITbUBkJzeiKsdd4QL+g9ITgXDAKBggqhkjOPQQD +AwNpADBmAjEA+2N7kXIuSeR+q48M3ZAddqQ1yKk9epGr/vjn8kAN6kHB18CYZ1IZ +fSS1qzj+GdJ4AjEAmaUjf/N+08nte4SlEo9bl0hszoPZCEEDaorzzZUZZg0rlwtU +TmnpNMRKPWKDDuNZ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw +WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg +RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G +h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV +6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw +gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD +ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj +v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB +AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g +BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu +Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc +MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL +pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp +eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH +pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7 +s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu +h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv +YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8 +ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0 +LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+ +EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY +Ig46v9mFmBvyH04= +-----END CERTIFICATE----- diff --git a/cert_STAR-PSG-NET-AU/privkey2.pem b/cert_STAR-PSG-NET-AU/privkey2.pem new file mode 100644 index 0000000..8eb6a15 --- /dev/null +++ b/cert_STAR-PSG-NET-AU/privkey2.pem @@ -0,0 +1,6 @@ +-----BEGIN PRIVATE KEY----- +MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDDNruDvCgZHOnvf2iE7 +tALMNMgDbRaW4VZTLIOuIAddLOG9V5UzpAHbXuy9ldvsFlKhZANiAAThtIynHzOL +n/IBhuP5OGwlcor3+qenrgJN4Ert3r7yLN2IySvM5TGGTP2KIDvhkMQYqURye+f4 +9+bpqXxjDE3XiB19W/AZLsWiTNfjj2xITHBMHkSFYoX6gkDIvKIKH64= +-----END PRIVATE KEY----- diff --git a/chain3.pem b/chain3.pem new file mode 100644 index 0000000..65797c8 --- /dev/null +++ b/chain3.pem @@ -0,0 +1,26 @@ +-----BEGIN CERTIFICATE----- +MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw +WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg +RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G +h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV +6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw +gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD +ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj +v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB +AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g +BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu +Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc +MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL +pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp +eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH +pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7 +s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu +h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv +YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8 +ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0 +LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+ +EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY +Ig46v9mFmBvyH04= +-----END CERTIFICATE----- diff --git a/cve-sync.log b/cve-sync.log new file mode 100644 index 0000000..32589b0 --- /dev/null +++ b/cve-sync.log @@ -0,0 +1,112 @@ +2025-04-22T08:01:13.987630700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-22T16:00:00.026814600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-23T00:00:00.004035100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-23T08:00:00.007768800 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-23T15:59:57.763430 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-24T00:00:00.016624800 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-24T08:01:08.636887200 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-24T15:59:57.765749700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-25T00:01:08.092828800 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-25T08:01:06.857710500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-25T15:59:57.731443100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-26T00:00:00.009948400 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-26T08:00:00.006638600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-26T16:01:08.623954 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-27T00:00:00.011085300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-27T08:01:11.972091100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-27T16:01:28.937311200 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-28T00:00:00.008333500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-28T07:59:56.208168300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-28T16:01:32.912372 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-29T00:01:16.831892100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-29T08:00:00.009434600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-29T16:00:00.015109300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-30T00:00:00.010769200 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-30T08:00:00.013797700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-30T16:00:00.030601100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-01T00:00:00.009068200 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-01T07:59:58.572069400 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-01T16:01:19.091394300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-02T00:00:00.014060300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-02T08:01:13.207239700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-02T16:00:00.013796700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-03T00:00:00.011198800 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-03T07:59:58.264769400 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-03T16:01:22.373358400 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-04T00:00:00.004206300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-04T08:01:13.972592100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-04T16:00:00.007804200 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-05T00:01:19.060217500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-05T08:01:17.844706800 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-05T16:00:00.022030200 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-06T00:01:17.022330500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-06T08:01:16.912824 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-06T16:01:18.366174500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-07T00:01:19.032636900 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-07T08:00:00.032290600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-07T15:59:58.216182700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-08T00:00:00.015498300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-08T08:01:16.749082900 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-08T16:00:00.008310600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-09T00:01:17.028476100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-09T08:01:17.895912100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-09T16:00:00.004853500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-10T00:01:20.875962100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-10T08:01:16.991245100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-10T16:01:18.649239800 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-11T00:01:17.603202100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-11T08:01:16.431230500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-11T16:01:17.459599700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-12T00:01:17.619409600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-12T08:01:16.031570900 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-12T16:01:18.305099800 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-13T00:00:00.011872100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-13T08:01:17.321038700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-13T16:00:00.016488600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-14T00:00:00.013132800 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-14T07:59:58.286809100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-14T16:00:00.017691100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-15T00:01:17.549725700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-15T07:59:58.224836 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-15T16:01:17.142352500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-16T00:01:15.618005100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-16T08:01:15.076920900 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-16T16:00:00.005493400 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-17T00:01:15.777671300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-17T08:00:00.015485600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-17T15:59:58.217869200 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-18T00:00:00.004178500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-18T08:01:16.545760700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-18T16:01:15.940931100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-19T00:00:00.007971400 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-19T08:00:00.007816900 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-19T15:59:58.215865600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-20T00:00:00.016141700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-20T07:59:58.232237500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-20T16:00:00.012581200 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-21T00:01:15.109241800 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-21T08:01:17.164403100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-21T15:59:58.179601100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-22T00:01:15.630576100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-22T07:59:58.194641300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-22T16:01:16.704448200 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-23T00:01:15.748653200 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-23T08:01:16.353470600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-23T15:59:58.209189500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-24T16:01:21.527591900 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-25T00:01:18.771297300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-25T08:00:00.013248900 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-25T15:59:58.178269400 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-26T00:00:00.009849900 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-26T08:00:00.015168300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-26T15:59:58.190632400 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-27T00:00:00.014399300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-27T08:01:23.904986900 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-06-10T16:00:00.065091900 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-06-11T00:00:00.232468600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-06-11T08:00:00.038478600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-06-11T16:00:00.169154300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-06-12T00:00:00.218915900 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-06-12T08:00:00.234811500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-06-12T16:00:00.234497100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-06-13T00:00:00.235901400 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null diff --git a/fullchain3.pem b/fullchain3.pem new file mode 100644 index 0000000..85ee0a9 --- /dev/null +++ b/fullchain3.pem @@ -0,0 +1,49 @@ +-----BEGIN CERTIFICATE----- +MIIDxTCCA0ugAwIBAgISBhz4/YQD6EMezB5EopCan11yMAoGCCqGSM49BAMDMDIx +CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF +NjAeFw0yNTA1MDUwNTUzMzNaFw0yNTA4MDMwNTUzMzJaMBcxFTATBgNVBAMMDCou +cHNnLm5ldC5hdTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJpLCOwSblm5ACILhTab +CcJ33gbdrFPQuFhvyinKWQ9DH+YCD630JX23hpKjsz69H1TrpMgIhQHkEgZEj5Ci +qmqySQmqgKIVoKQKWlGA/UAyDkTwyQP1RruTZnvVAD6/HaOCAj0wggI5MA4GA1Ud +DwEB/wQEAwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0T +AQH/BAIwADAdBgNVHQ4EFgQUYL0bYOh8hJwrdPX1U2xU2Q/2938wHwYDVR0jBBgw +FoAUkydGmAOpUWiOmNbEQkjbI79YlNIwVQYIKwYBBQUHAQEESTBHMCEGCCsGAQUF +BzABhhVodHRwOi8vZTYuby5sZW5jci5vcmcwIgYIKwYBBQUHMAKGFmh0dHA6Ly9l +Ni5pLmxlbmNyLm9yZy8wFwYDVR0RBBAwDoIMKi5wc2cubmV0LmF1MBMGA1UdIAQM +MAowCAYGZ4EMAQIBMC4GA1UdHwQnMCUwI6AhoB+GHWh0dHA6Ly9lNi5jLmxlbmNy +Lm9yZy8xMTUuY3JsMIIBAwYKKwYBBAHWeQIEAgSB9ASB8QDvAHYADeHyMCvTDcFA +YhIJ6lUu/Ed0fLHX6TDvDkIetH5OqjQAAAGWnzdNfwAABAMARzBFAiEAwLijBIRC +CJOfwuxVFhgUfXd7uCK30uOTYP+RfC9nhr0CIGfHOYsvZHe08QbHafkOzPN6tyRY +L4RKXMAv6JtS+XsAAHUAzPsPaoVxCWX+lZtTzumyfCLphVwNl422qX5UwP5MDbAA +AAGWnzdNlAAABAMARjBEAiArgRGaKdgItURxSHkcHCrx/DZ5pnyUMxLB5Q41BhCk +awIgG407b550tzhr+mvkOI+99cLXAdxabP7Fi2KMhq9Fsv0wCgYIKoZIzj0EAwMD +aAAwZQIxALHo2SGs6E34Q19nu7BFXQq0ccqE2S7Kb8EkxOeTn4Y4xa3M+owUJubH +wxi1cNOeYgIwdx43f6qVT+1BzT3sAkgFMVyDcc8iAaJIDmLv3hxR8WwIwG4h9K9F +QbLJbCSxXSo5 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw +WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg +RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G +h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV +6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw +gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD +ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj +v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB +AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g +BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu +Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc +MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL +pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp +eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH +pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7 +s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu +h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv +YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8 +ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0 +LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+ +EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY +Ig46v9mFmBvyH04= +-----END CERTIFICATE----- diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..e6441136f3d4ba8a0da8d277868979cfbc8ad796 GIT binary patch literal 43453 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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
NnX)EH+Nua)3Y(c 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..25da30d --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..35be028 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,702 @@ +{ + "name": "ld-sysinfo-server", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ld-sysinfo-server", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "axios": "^1.9.0", + "cheerio": "^1.0.0", + "dotenv": "^16.5.0", + "mysql2": "^3.14.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/aws-ssl-profiles": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", + "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/axios": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", + "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/cheerio": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0.tgz", + "integrity": "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==", + "license": "MIT", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "encoding-sniffer": "^0.2.0", + "htmlparser2": "^9.1.0", + "parse5": "^7.1.2", + "parse5-htmlparser2-tree-adapter": "^7.0.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^6.19.5", + "whatwg-mimetype": "^4.0.0" + }, + "engines": { + "node": ">=18.17" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/encoding-sniffer": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz", + "integrity": "sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==", + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" + }, + "funding": { + "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "license": "MIT", + "dependencies": { + "is-property": "^1.0.2" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/htmlparser2": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", + "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "license": "MIT" + }, + "node_modules/long": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.1.tgz", + "integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==", + "license": "Apache-2.0" + }, + "node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/lru.min": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.2.tgz", + "integrity": "sha512-Nv9KddBcQSlQopmBHXSsZVY5xsdlZkdH/Iey0BlcBYggMd4two7cZnKOK9vmy3nY0O5RGH99z1PCeTpPqszUYg==", + "license": "MIT", + "engines": { + "bun": ">=1.0.0", + "deno": ">=1.30.0", + "node": ">=8.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wellwelwel" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mysql2": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.14.1.tgz", + "integrity": "sha512-7ytuPQJjQB8TNAYX/H2yhL+iQOnIBjAMam361R7UAL0lOVXWjtdrmoL9HYKqKoLp/8UUTRcvo1QPvK9KL7wA8w==", + "license": "MIT", + "dependencies": { + "aws-ssl-profiles": "^1.1.1", + "denque": "^2.1.0", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^5.2.1", + "lru.min": "^1.0.0", + "named-placeholders": "^1.1.3", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", + "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", + "license": "MIT", + "dependencies": { + "lru-cache": "^7.14.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "license": "MIT", + "dependencies": { + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-parser-stream": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", + "license": "MIT", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" + }, + "node_modules/sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undici": { + "version": "6.21.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", + "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..0461749 --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "name": "ld-sysinfo-server", + "version": "1.0.0", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "type": "module", + "description": "", + "dependencies": { + "axios": "^1.9.0", + "cheerio": "^1.0.0", + "dotenv": "^16.5.0", + "mysql2": "^3.14.1" + } +} diff --git a/privkey3.pem b/privkey3.pem new file mode 100644 index 0000000..bf819c7 --- /dev/null +++ b/privkey3.pem @@ -0,0 +1,6 @@ +-----BEGIN PRIVATE KEY----- +MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCxBRzMYQJh/ETrQptv +cBEuQ/9PlGZTVbCYt6AEj5ritog9aew0Uxu+rOh46yn9YV+hZANiAASaSwjsEm5Z +uQAiC4U2mwnCd94G3axT0LhYb8opylkPQx/mAg+t9CV9t4aSo7M+vR9U66TICIUB +5BIGRI+QoqpqskkJqoCiFaCkClpRgP1AMg5E8MkD9Ua7k2Z71QA+vx0= +-----END PRIVATE KEY----- diff --git a/scripts/.enrichment_resume b/scripts/.enrichment_resume new file mode 100644 index 0000000..d67edce --- /dev/null +++ b/scripts/.enrichment_resume @@ -0,0 +1 @@ +CVE-1999-0057 \ No newline at end of file diff --git a/scripts/.env.local b/scripts/.env.local new file mode 100644 index 0000000..fddef40 --- /dev/null +++ b/scripts/.env.local @@ -0,0 +1,7 @@ +DB_HOST=localhost +DB_USER=root +DB_PASSWORD=6DRR4xWvHBhSqLGtIOEKa7gHjKnX33Hf +DB_NAME=db_ld-spring-backend + +NVD_API_KEY=42b4f093-e8c4-4110-a7d1-6ab2ba6234aa +NVD_MAX_RANGE_DAYS=30 diff --git a/scripts/.last_synced_date b/scripts/.last_synced_date new file mode 100644 index 0000000..aa022a2 --- /dev/null +++ b/scripts/.last_synced_date @@ -0,0 +1 @@ +2001-08-20T00:00:00.000Z \ No newline at end of file diff --git a/scripts/cve-sync.log b/scripts/cve-sync.log new file mode 100644 index 0000000..e89869d --- /dev/null +++ b/scripts/cve-sync.log @@ -0,0 +1,48 @@ +[27 May 2025, 12:53:07 pm] 🚀 📡 CVE sync launched in background. +[27 May 2025, 12:53:08 pm] 🧪 Getting CVEs from the last 7 of days +[27 May 2025, 12:53:08 pm] 🧪 Getting CVEs from the last 7 of days +[27 May 2025, 12:53:08 pm] 🚀 CVE sync started +[27 May 2025, 12:53:08 pm] 🔄 Initializing script... +[27 May 2025, 12:53:08 pm] 📠Launching script +[27 May 2025, 12:53:08 pm] 📅 Starting CVE sync from 2025-05-20T04:53:08.063Z to 2025-05-27T04:53:08.063Z +[27 May 2025, 12:53:08 pm] 📡 Fetching modified CVEs from 20 May 2025 to 27 May 2025... +[27 May 2025, 12:53:08 pm] 🚀 CVE sync started +[27 May 2025, 12:53:08 pm] 🔄 Initializing script... +[27 May 2025, 12:53:08 pm] 📠Launching script +[27 May 2025, 12:53:08 pm] 📅 Starting CVE sync from 2025-05-20T04:53:08.063Z to 2025-05-27T04:53:08.063Z +[27 May 2025, 12:53:08 pm] 📡 Fetching modified CVEs from 20 May 2025 to 27 May 2025... +[27 May 2025, 12:53:10 pm] 📄 Page 1 — Processing 2000 CVEs from index 0 of ~2212 +[27 May 2025, 12:53:10 pm] 📄 Page 1 — Processing 2000 CVEs from index 0 of ~2212 +[27 May 2025, 12:53:27 pm] 📄 Page 2 — Processing 212 CVEs from index 2000 of ~2212 +[27 May 2025, 12:53:27 pm] 📄 Page 2 — Processing 212 CVEs from index 2000 of ~2212 +[27 May 2025, 12:53:33 pm] ✅ CVE import complete! +[27 May 2025, 12:53:33 pm] ✅ CVE import complete! +[27 May 2025, 12:53:33 pm] ✅ fetchCVE.js finished with exit code: 0 +[27 May 2025, 12:54:46 pm] 🚀 📡 CVE sync launched in background. +[27 May 2025, 12:54:46 pm] 🧪 Getting CVEs from the last 30 of days +[27 May 2025, 12:54:46 pm] 🧪 Getting CVEs from the last 30 of days +[27 May 2025, 12:54:46 pm] 🚀 CVE sync started +[27 May 2025, 12:54:46 pm] 🔄 Initializing script... +[27 May 2025, 12:54:46 pm] 📠Launching script +[27 May 2025, 12:54:46 pm] 📅 Starting CVE sync from 2025-04-27T04:54:46.513Z to 2025-05-27T04:54:46.513Z +[27 May 2025, 12:54:46 pm] 📡 Fetching modified CVEs from 27 Apr 2025 to 27 May 2025... +[27 May 2025, 12:54:46 pm] 🚀 CVE sync started +[27 May 2025, 12:54:46 pm] 🔄 Initializing script... +[27 May 2025, 12:54:46 pm] 📠Launching script +[27 May 2025, 12:54:46 pm] 📅 Starting CVE sync from 2025-04-27T04:54:46.513Z to 2025-05-27T04:54:46.513Z +[27 May 2025, 12:54:46 pm] 📡 Fetching modified CVEs from 27 Apr 2025 to 27 May 2025... +[27 May 2025, 12:54:49 pm] 📄 Page 1 — Processing 2000 CVEs from index 0 of ~10257 +[27 May 2025, 12:54:49 pm] 📄 Page 1 — Processing 2000 CVEs from index 0 of ~10257 +[27 May 2025, 12:55:55 pm] 📄 Page 2 — Processing 2000 CVEs from index 2000 of ~10257 +[27 May 2025, 12:55:55 pm] 📄 Page 2 — Processing 2000 CVEs from index 2000 of ~10257 +[27 May 2025, 12:56:18 pm] 📄 Page 3 — Processing 2000 CVEs from index 4000 of ~10257 +[27 May 2025, 12:56:18 pm] 📄 Page 3 — Processing 2000 CVEs from index 4000 of ~10257 +[27 May 2025, 12:56:35 pm] 📄 Page 4 — Processing 2000 CVEs from index 6000 of ~10257 +[27 May 2025, 12:56:35 pm] 📄 Page 4 — Processing 2000 CVEs from index 6000 of ~10257 +[27 May 2025, 12:57:03 pm] 📄 Page 5 — Processing 2000 CVEs from index 8000 of ~10257 +[27 May 2025, 12:57:03 pm] 📄 Page 5 — Processing 2000 CVEs from index 8000 of ~10257 +[27 May 2025, 12:57:15 pm] 📄 Page 6 — Processing 257 CVEs from index 10000 of ~10257 +[27 May 2025, 12:57:15 pm] 📄 Page 6 — Processing 257 CVEs from index 10000 of ~10257 +[27 May 2025, 12:57:21 pm] ✅ CVE import complete! +[27 May 2025, 12:57:21 pm] ✅ CVE import complete! +[27 May 2025, 12:57:21 pm] ✅ fetchCVE.js finished with exit code: 0 diff --git a/scripts/enrichCVE_MSRC.js b/scripts/enrichCVE_MSRC.js new file mode 100644 index 0000000..f059d20 --- /dev/null +++ b/scripts/enrichCVE_MSRC.js @@ -0,0 +1,177 @@ +#!/usr/bin/env node + +import axios from 'axios'; +import mysql from 'mysql2/promise'; +import dotenv from 'dotenv'; + +dotenv.config({ path: '.env.local' }); + +const DB = await mysql.createConnection({ + host: process.env.DB_HOST, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME, +}); + +function formatDate(isoString) { + if (!isoString) return null; + const date = new Date(isoString); + return date.toISOString().slice(0, 19).replace('T', ' '); +} + +function getLocalizedText(entry, fallback = '') { + if (!entry || typeof entry !== 'object') return fallback; + + // MSRC: sometimes the object directly has "Value" + if ('Value' in entry && typeof entry.Value === 'string') { + return entry.Value; + } + + // If it's localized (e.g., { "en-US": { Value: ... } }) + if (entry['en-US']?.Value) return entry['en-US'].Value; + + // Fallback: first valid value + for (const key in entry) { + if (entry[key]?.Value) return entry[key].Value; + } + + return fallback; +} + + +function extractDescription(notes = [], fallback = '') { + const note = notes.find(n => + n.Title === 'Description' && + n.Type === 2 && + typeof n.Value === 'string' && + n.Value.trim().length > 0 + ); + return note?.Value || fallback; +} + +function extractAffectedProducts(vuln) { + const fixed = vuln.ProductStatuses?.Fixed ?? []; + const known = vuln.ProductStatuses?.KnownAffected ?? []; + const underInvestigation = vuln.ProductStatuses?.UnderInvestigation ?? []; + return [...new Set([...fixed, ...known, ...underInvestigation])].join(', '); +} + +async function fetchCVRFDoc(cvrfId) { + const url = `https://api.msrc.microsoft.com/cvrf/v3.0/cvrf/${cvrfId}`; + try { + const res = await axios.get(url, { + headers: { Accept: 'application/json' }, + }); + return res.data; + } catch (err) { + console.error(`⌠Failed to fetch CVRF for ${cvrfId}:`, err.message); + return null; + } +} + +async function enrichCVE(cve, data) { + const [rows] = await DB.execute( + `SELECT title, severity, description, cvss_score, cvss_vector FROM cves WHERE id = ?`, + [cve] + ); + + if (rows.length === 0) return; + + const existing = rows[0]; + const updateFields = { + title: existing.title || data.title, + severity: existing.severity || data.severity, + description: (existing.description?.length ?? 0) < 20 ? data.description : existing.description, + cvss_score: existing.cvss_score ?? data.cvssScore, + cvss_vector: existing.cvss_vector || data.cvssVector, + }; + + await DB.execute( + `UPDATE cves + SET title = ?, severity = ?, description = ?, cvss_score = ?, cvss_vector = ? + WHERE id = ?`, + [updateFields.title, updateFields.severity, updateFields.description, updateFields.cvss_score, updateFields.cvss_vector, cve] + ); + +} + +async function storeVulnerability(v, published, modified) { + const cve = v.CVE; + console.log(`â³ Processing ${cve}...`); + + const title = getLocalizedText(v.Title, ''); + console.debug(`🧪 Raw Title for ${cve}:`, JSON.stringify(v.Title, null, 2)); + console.debug(`âž¡ï¸ Parsed Title: "${title}"`); + const description = extractDescription(v.Notes, title); + const affectedProducts = extractAffectedProducts(v); + const severity = v.Threats?.find(t => t.Type === 'Severity')?.Description?.Value || ''; + const exploitability = v.Threats?.find(t => t.Type === 'Exploitability')?.Description?.Value || ''; + const cvssSet = v.CVSSScoreSets?.[0]; + const cvssScore = cvssSet?.BaseScore || null; + const cvssVector = cvssSet?.Vector || ''; + const cweList = Array.isArray(v.CWE) ? v.CWE : []; + + await DB.execute( + `INSERT INTO microsoft_cves (cve_id, title, severity, published_date, last_modified_date, + affected_products, description, exploitability, cvss_score, cvss_vector) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE + last_modified_date = VALUES(last_modified_date), + affected_products = VALUES(affected_products), + severity = VALUES(severity), + description = VALUES(description), + exploitability = VALUES(exploitability), + cvss_score = VALUES(cvss_score), + cvss_vector = VALUES(cvss_vector)`, + [cve, title, severity, published, modified, affectedProducts, description, exploitability, cvssScore, cvssVector] + ); + + for (const { ID: cweId, Value: cweName } of cweList) { + if (!cweId) continue; + + await DB.execute( + `INSERT IGNORE INTO cwe_entries (cwe_id, cwe_name) VALUES (?, ?)`, + [cweId, cweName || null] + ); + + await DB.execute( + `INSERT IGNORE INTO cve_cwe (cve_id, cwe_id) VALUES (?, ?)`, + [cve, cweId] + ); + } + + await enrichCVE(cve, { title, severity, description, cvssScore, cvssVector }); + console.log(`✅ Updated ${cve} in master table`); +} + +function getPreviousMonthID() { + const now = new Date(); + now.setMonth(now.getMonth() - 1); + const year = now.getFullYear(); + const month = now.toLocaleString('en-US', { month: 'short' }); // e.g., "Mar" + return `${year}-${month}`; +} + +async function enrichPreviousMonth() { + const cvrfId = getPreviousMonthID(); + console.log(`📡 Fetching CVEs for ${cvrfId}...`); + + const data = await fetchCVRFDoc(cvrfId); + if (!data) return; + + const published = formatDate(data.DocumentTracking?.InitialReleaseDate); + const modified = formatDate(data.DocumentTracking?.CurrentReleaseDate); + + const vulns = data.Vulnerability || []; + console.log(`📋 Found ${vulns.length} vulnerabilities.`); + + for (const v of vulns) { + await storeVulnerability(v, published, modified); + } + + console.log(`🎉 Enrichment complete for ${cvrfId}`); + await DB.end(); + } + + console.log("🚀 Starting MSRC enrichment of CVEs..."); + await enrichPreviousMonth(); \ No newline at end of file diff --git a/scripts/fetchCVE.js b/scripts/fetchCVE.js new file mode 100644 index 0000000..70f7258 --- /dev/null +++ b/scripts/fetchCVE.js @@ -0,0 +1,208 @@ +#!/usr/bin/env node + +import fs from 'fs'; +import axios from 'axios'; +import mysql from 'mysql2/promise'; + +const logFile = fs.createWriteStream('cve-sync.log', { + flags: 'a', + encoding: 'utf8', +}); + +function log(msg) { + const now = new Date(); + + // Generate the locale string with hour12 enabled (e.g. "14 Apr 2025, 08:14:42 AM") + const raw = now.toLocaleString('en-AU', { + day: '2-digit', + month: 'short', + year: 'numeric', + hour: '2-digit', + minute: '2-digit', + second: '2-digit', + hour12: true, + }); + + // Regex to convert only the AM/PM to lowercase + const formatted = raw.replace(/\b(AM|PM)\b/, (match) => match.toLowerCase()); + + const timestamp = `[${formatted}]`; + const line = `${timestamp} ${msg}`; + console.log(line); + logFile.write(`${line}\n`); +} + + + +function formatDate(isoString) { + if (!isoString) return null; + const date = new Date(isoString); + return date.toISOString().slice(0, 19).replace('T', ' '); +} + +function formatShortDate(isoString) { + return new Date(isoString).toLocaleDateString('en-AU', { + day: '2-digit', + month: 'short', + year: 'numeric', + }).replace(/\b([A-Z])([a-z]+)\b/, (_, a, b) => a + b); // Capitalize only first letter of month +} + + +function extractCpeParts(cpe) { + const parts = cpe.split(':'); + return { + vendor: parts[3] || null, + product: parts[4] || null, + version: parts[5] || null + }; +} + +function addDaysToISO(dateISO, days) { + const date = new Date(dateISO); + date.setDate(date.getDate() + days); + return date.toISOString(); +} + +const DB = await mysql.createConnection({ + host: process.env.DB_HOST, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME, +}); + +const BASE_URL = 'https://services.nvd.nist.gov/rest/json/cves/2.0'; +const API_KEY = process.env.NVD_API_KEY; +const RESULTS_PER_PAGE = 2000; +let MAX_RANGE_DAYS = Number(process.env.NVD_MAX_RANGE_DAYS || 7); + +log(`🧪 Getting CVEs from the last ${MAX_RANGE_DAYS} of days`); + +if (MAX_RANGE_DAYS > 120) { + log("âš ï¸ MAX_RANGE_DAYS exceeds NVD API limit. Defaulting to 120."); + MAX_RANGE_DAYS = 120; +} +if (isNaN(MAX_RANGE_DAYS) || MAX_RANGE_DAYS < 1) { + log("âš ï¸ Invalid MAX_RANGE_DAYS. Using default of 7."); + MAX_RANGE_DAYS = 7; +} + +async function fetchCVEPage(startIndex, startDate, endDate) { + try { + const res = await axios.get(BASE_URL, { + params: { + startIndex, + resultsPerPage: RESULTS_PER_PAGE, + lastModStartDate: startDate, + lastModEndDate: endDate, + }, + headers: API_KEY ? { apiKey: API_KEY } : {} + }); + + return res.data; + } catch (err) { + log(`⌠API error: ${err.response?.status} - ${err.response?.data?.message || err.message}`); + throw err; + } +} + +async function processCVE(cveWrapper) { + const cve = cveWrapper.cve; + const cveId = cve.id; + const desc = cve.descriptions.find(d => d.lang === 'en')?.value ?? ''; + const published = formatDate(cve.published); + const modified = formatDate(cve.lastModified); + const severity = cve.metrics?.cvssMetricV31?.[0]?.cvssData?.baseSeverity ?? null; + const score = cve.metrics?.cvssMetricV31?.[0]?.cvssData?.baseScore ?? null; + + try { + await DB.execute( + `INSERT INTO cves (id, description, published_date, last_modified_date, severity, cvss_score) + VALUES (?, ?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE last_modified_date = VALUES(last_modified_date)`, + [cveId, desc, published, modified, severity, score] + ); + } catch (err) { + log(`⌠Error inserting CVE ${cveId}: ${err.message}`); + } + + const configurations = cve.configurations ?? []; + for (const node of configurations) { + for (const match of node.nodes?.flatMap(n => n.cpeMatch ?? []) ?? []) { + const cpe = match.criteria; + const vulnerable = match.vulnerable ? 1 : 0; + const start = match.versionStartIncluding || match.versionStartExcluding || null; + const end = match.versionEndIncluding || match.versionEndExcluding || null; + + const { vendor, product, version } = extractCpeParts(cpe); + + try { + await DB.execute( + `INSERT INTO cpe_matches (cve_id, cpe_uri, version_start, version_end, vulnerable, vendor, product, version) + VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, + [cveId, cpe, start, end, vulnerable, vendor, product, version] + ); + } catch (err) { + log(`âš ï¸ Error inserting CPE for CVE ${cveId}: ${err.message}`); + } + } + } +} + +async function getMostRecentModifiedDateFromDB() { + const [rows] = await DB.query(`SELECT MAX(last_modified_date) AS lastMod FROM cves`); + const lastMod = rows[0]?.lastMod; + return lastMod ? new Date(lastMod).toISOString() : '2020-01-01T00:00:00.000Z'; +} + +async function importCVEFeed() { + const now = new Date(); + const endDate = now.toISOString(); + + const startDateObj = new Date(now); + startDateObj.setDate(startDateObj.getDate() - MAX_RANGE_DAYS); + const startDate = startDateObj.toISOString(); + + log(`🚀 CVE sync started`); + log(`🔄 Initializing script...`); + log(`📠Launching script`); + log(`📅 Starting CVE sync from ${startDate} to ${endDate}`); + + const humanStart = formatShortDate(startDate); + const humanEnd = formatShortDate(endDate); + log(`📡 Fetching modified CVEs from ${humanStart} to ${humanEnd}...`); + + let startIndex = 0; + let totalResults = Infinity; + let pageCount = 0; + + do { + const data = await fetchCVEPage(startIndex, startDate, endDate); + const vulnerabilities = data.vulnerabilities || []; + totalResults = data.totalResults ?? vulnerabilities.length; + + if (vulnerabilities.length === 0) { + log(`âš ï¸ No CVEs returned at index ${startIndex}`); + break; + } + + log(`📄 Page ${++pageCount} — Processing ${vulnerabilities.length} CVEs from index ${startIndex} of ~${totalResults}`); + + for (const vuln of vulnerabilities) { + await processCVE(vuln); + } + + startIndex += RESULTS_PER_PAGE; + await new Promise((r) => setTimeout(r, 6000)); + } while (startIndex < totalResults); + + log('✅ CVE import complete!'); + await DB.end(); + logFile.end(); +} + + +importCVEFeed().catch((err) => { + log(`⌠Fatal error during import: ${err.message}`); + logFile.end(); +}); diff --git a/scripts/fetchCVE_v2.js b/scripts/fetchCVE_v2.js new file mode 100644 index 0000000..21f05dc --- /dev/null +++ b/scripts/fetchCVE_v2.js @@ -0,0 +1,457 @@ +#!/usr/bin/env node + +import dotenv from 'dotenv'; +dotenv.config({ path: '.env.local' }); + +import fs from 'fs'; +import axios from 'axios'; +import mysql from 'mysql2/promise'; + +const logFile = fs.createWriteStream('cve-sync.log', { + flags: 'a', + encoding: 'utf8', +}); +const RESUME_FILE = '.enrichment_resume'; +const DB = await mysql.createConnection({ + host: process.env.DB_HOST, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME, +}); +const BASE_URL = 'https://services.nvd.nist.gov/rest/json/cves/2.0'; +const API_KEY = process.env.NVD_API_KEY; +const RESULTS_PER_PAGE = 2000; +let MAX_RANGE_DAYS = Number(process.env.NVD_MAX_RANGE_DAYS || 120); +log(`🧪 Getting CVEs from the last ${MAX_RANGE_DAYS} of days`); + +if (MAX_RANGE_DAYS > 120) { + log("âš ï¸ MAX_RANGE_DAYS exceeds NVD API limit. Defaulting to 120."); + MAX_RANGE_DAYS = 120; +} +if (isNaN(MAX_RANGE_DAYS) || MAX_RANGE_DAYS < 1) { + log("âš ï¸ Invalid MAX_RANGE_DAYS. Using default of 7."); + MAX_RANGE_DAYS = 7; +} + +function saveLastProcessedCVE(cveId) { + fs.writeFileSync(RESUME_FILE, cveId, 'utf8'); +} + +function loadLastProcessedCVE() { + if (!fs.existsSync(RESUME_FILE)) return null; + return fs.readFileSync(RESUME_FILE, 'utf8'); +} + +function log(msg) { + const now = new Date(); + + // Generate the locale string with hour12 enabled (e.g. "14 Apr 2025, 08:14:42 AM") + const raw = now.toLocaleString('en-AU', { + day: '2-digit', + month: 'short', + year: 'numeric', + hour: '2-digit', + minute: '2-digit', + second: '2-digit', + hour12: true, + }); + + // Regex to convert only the AM/PM to lowercase + const formatted = raw.replace(/\b(AM|PM)\b/, (match) => match.toLowerCase()); + + const timestamp = `[${formatted}]`; + const line = `${timestamp} ${msg}`; + console.log(line); + logFile.write(`${line}\n`); +} + +function formatDate(isoString) { + if (!isoString) return null; + const date = new Date(isoString); + return date.toISOString().slice(0, 19).replace('T', ' '); +} + +function formatShortDate(isoString) { + return new Date(isoString).toLocaleDateString('en-AU', { + day: '2-digit', + month: 'short', + year: 'numeric', + }).replace(/\b([A-Z])([a-z]+)\b/, (_, a, b) => a + b); // Capitalize only first letter of month +} + +function extractCpeParts(cpe) { + const parts = cpe.split(':'); + return { + vendor: parts[3] || null, + product: parts[4] || null, + version: parts[5] || null + }; +} + +function addDaysToISO(dateISO, days) { + const date = new Date(dateISO); + date.setDate(date.getDate() + days); + return date.toISOString(); +} + +async function fetchCVEPage(startIndex, startDate, endDate, extraOptions = {}) { + try { + const res = await axios.get(BASE_URL, { + params: { + pubStartDate: startDate, + pubEndDate: endDate, + startIndex, + resultsPerPage: RESULTS_PER_PAGE, + ...extraOptions, + }, + headers: API_KEY ? { apiKey: API_KEY } : {} + }); + + return res.data; + } catch (err) { + log(`⌠API error: ${err.response?.status} - ${err.response?.data?.message || err.message}`); + throw err; + } +} + +async function processCVE(cveWrapper) { + const cve = cveWrapper.cve; + const cveId = cve.id; + + const title = cve.titles?.find(t => t.lang === 'en')?.title || ''; + const desc = cve.descriptions?.find(d => d.lang === 'en')?.value || ''; + const published = formatDate(cve.published); + const modified = formatDate(cve.lastModified); + + // CVSSv2 + const metricV2 = cve.metrics?.cvssMetricV2?.[0]; + const severityV2 = metricV2?.cvssData?.baseSeverity || null; + const scoreV2 = metricV2?.cvssData?.baseScore || null; + const vectorV2 = metricV2?.cvssData?.vectorString || ''; + + // CVSSv3 + const metricV3 = cve.metrics?.cvssMetricV31?.[0]; + const severityV3 = metricV3?.cvssData?.baseSeverity || null; + const scoreV3 = metricV3?.cvssData?.baseScore || null; + const vectorV3 = metricV3?.cvssData?.vectorString || ''; + + // CVSSv4 + const metricV4 = cve.metrics?.cvssMetricV40?.[0] || cve.metrics?.cvssMetricV4?.[0]; + const severityV4 = metricV4?.cvssData?.baseSeverity || null; + const scoreV4 = metricV4?.cvssData?.baseScore || null; + const vectorV4 = metricV4?.cvssData?.vectorString || ''; + + // CWE IDs + const cweIds = (cve.weaknesses || []) + .flatMap(w => w.description || []) + .filter(desc => desc.lang === 'en') + .map(desc => desc.value) + .join(','); + + // References + const references = (cve.references || []) + .map(ref => ref.url) + .join(','); + + // Tags + const cveTags = cve.cveMetadata?.cveTags || []; + const hasKev = cveTags.includes('Known_Exploited_Vulnerability'); + const hasCertNotes = cveTags.includes('CERT-VN'); + const hasCertAlerts = cveTags.includes('US-CERT-TA'); + + try { + await DB.execute( + `INSERT INTO cves ( + id, title, description, published_date, last_modified_date, + severity_v2, cvss_score_v2, cvss_vector_v2, + severity_v3, cvss_score_v3, cvss_vector_v3, + severity_v4, cvss_score_v4, cvss_vector_v4, + cwe_ids, \`references\`, hasKev, hasCertNotes, hasCertAlerts, source + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE + last_modified_date = VALUES(last_modified_date), + severity_v2 = IFNULL(severity_v2, VALUES(severity_v2)), + cvss_score_v2 = IFNULL(cvss_score_v2, VALUES(cvss_score_v2)), + cvss_vector_v2 = IFNULL(cvss_vector_v2, VALUES(cvss_vector_v2)), + severity_v3 = IFNULL(severity_v3, VALUES(severity_v3)), + cvss_score_v3 = IFNULL(cvss_score_v3, VALUES(cvss_score_v3)), + cvss_vector_v3 = IFNULL(cvss_vector_v3, VALUES(cvss_vector_v3)), + severity_v4 = IFNULL(severity_v4, VALUES(severity_v4)), + cvss_score_v4 = IFNULL(cvss_score_v4, VALUES(cvss_score_v4)), + cvss_vector_v4 = IFNULL(cvss_vector_v4, VALUES(cvss_vector_v4)), + cwe_ids = IFNULL(cwe_ids, VALUES(cwe_ids)), + \`references\` = IFNULL(\`references\`, VALUES(\`references\`)), + hasKev = VALUES(hasKev), + hasCertNotes = VALUES(hasCertNotes), + hasCertAlerts = VALUES(hasCertAlerts), + source = VALUES(source) + `, + [ + cveId, title, desc, published, modified, + severityV2, scoreV2, vectorV2, + severityV3, scoreV3, vectorV3, + severityV4, scoreV4, vectorV4, + cweIds, references, hasKev ? 1 : 0, hasCertNotes ? 1 : 0, hasCertAlerts ? 1 : 0, 'NVD' + ] + ); + } catch (err) { + log(`⌠Error inserting CVE ${cveId}: ${err.message}`); + } +} + +async function getMostRecentModifiedDateFromDB() { + const [rows] = await DB.query(`SELECT MAX(last_modified_date) AS lastMod FROM cves`); + const lastMod = rows[0]?.lastMod; + return lastMod ? new Date(lastMod).toISOString() : '2020-01-01T00:00:00.000Z'; +} + +async function importCVEFeed() { + const now = new Date(); + const endDate = now.toISOString(); + + const startDateObj = new Date(now); + startDateObj.setDate(startDateObj.getDate() - MAX_RANGE_DAYS); + const startDate = startDateObj.toISOString(); + + log(`🚀 CVE sync started`); + log(`🔄 Initializing script...`); + log(`📠Launching script`); + log(`📅 Starting CVE sync from ${startDate} to ${endDate}`); + + const humanStart = formatShortDate(startDate); + const humanEnd = formatShortDate(endDate); + log(`📡 Fetching modified CVEs from ${humanStart} to ${humanEnd}...`); + + let startIndex = 0; + let totalResults = Infinity; + let pageCount = 0; + + do { + const data = await fetchCVEPage(startIndex, startDate, endDate); + const vulnerabilities = data.vulnerabilities || []; + totalResults = data.totalResults ?? vulnerabilities.length; + + if (vulnerabilities.length === 0) { + log(`âš ï¸ No CVEs returned at index ${startIndex}`); + break; + } + + log(`📄 Page ${++pageCount} — Processing ${vulnerabilities.length} CVEs from index ${startIndex} of ~${totalResults}`); + + for (const vuln of vulnerabilities) { + await processCVE(vuln); + } + + startIndex += RESULTS_PER_PAGE; + await new Promise((r) => setTimeout(r, 6000)); + } while (startIndex < totalResults); + + log('✅ CVE import complete!'); + await DB.end(); + logFile.end(); +} + +async function importCVEFeedBackfill() { + const now = new Date(); + const resumeFrom = loadLastSyncedDate(); + let startFrom = resumeFrom ? new Date(resumeFrom) : now; + + const MAX_RANGE_DAYS = 120; + + log(resumeFrom + ? `🔠Resuming CVE backfill from ${formatShortDate(startFrom.toISOString())}` + : `â®ï¸ Starting CVE backfill from today (${formatShortDate(startFrom.toISOString())})` + ); + + while (true) { + const end = new Date(startFrom); + const start = new Date(startFrom); + start.setDate(start.getDate() - MAX_RANGE_DAYS + 1); // 120-day window + + const startISO = start.toISOString(); + const endISO = end.toISOString(); + const humanRange = `${formatShortDate(startISO)} to ${formatShortDate(endISO)}`; + + log(`📡 Fetching published CVEs from ${humanRange}...`); + + let startIndex = 0; + let totalResults = Infinity; + let pageCount = 0; + + try { + do { + const data = await fetchCVEPage(startIndex, startISO, endISO); + const vulnerabilities = data.vulnerabilities || []; + totalResults = data.totalResults ?? vulnerabilities.length; + + if (vulnerabilities.length === 0) { + log(`âš ï¸ No CVEs returned for ${humanRange} at index ${startIndex}`); + break; + } + + log(`📄 Page ${++pageCount} — ${vulnerabilities.length} CVEs from index ${startIndex}`); + + for (const vuln of vulnerabilities) { + await processCVE(vuln); + } + + startIndex += RESULTS_PER_PAGE; + await new Promise((r) => setTimeout(r, 6000)); + } while (startIndex < totalResults); + + // Move the window backward + saveLastSyncedDate(start.toISOString()); + startFrom = start; + } catch (err) { + log(`⌠Error during ${humanRange}: ${err.message}`); + break; + } + + if (start < new Date('2002-01-01')) { + log(`🛑 Reached earliest supported CVE publication date — halting backfill.`); + break; + } + } + + log('✅ CVE backfill complete!'); + await DB.end(); + logFile.end(); +} + +async function importCVEEnrichmentFromDB() { + log(`🔠Starting CVE enrichment from existing database records...`); + + const lastProcessed = loadLastProcessedCVE(); + if (lastProcessed) { + log(`🔠Resuming enrichment from after ${lastProcessed}`); + } + + const [rows] = await DB.query(` + SELECT id + FROM cves + WHERE severity_v3 IS NULL OR cvss_score_v3 IS NULL OR cvss_vector_v3 IS NULL + ORDER BY id ASC + `); + + if (rows.length === 0) { + log(`✅ All CVEs seem enriched! Nothing to do.`); + await DB.end(); + logFile.end(); + return; + } + + let startIndex = 0; + if (lastProcessed) { + const resumeIndex = rows.findIndex(r => r.id === lastProcessed); + if (resumeIndex !== -1 && resumeIndex + 1 < rows.length) { + startIndex = resumeIndex + 1; // Start *after* last processed + } + } + + log(`📄 Found ${rows.length} CVEs needing enrichment, starting at index ${startIndex}.`); + + for (let i = startIndex; i < rows.length; i++) { + const row = rows[i]; + const cveId = row.id; + + try { + const res = await axios.get(BASE_URL, { + params: { cveId }, + headers: API_KEY ? { apiKey: API_KEY } : {} + }); + + const vulnerabilities = res.data.vulnerabilities || []; + if (vulnerabilities.length > 0) { + await processCVE(vulnerabilities[0]); + log(`✅ Enriched ${cveId}`); + } else { + log(`âš ï¸ No data found for ${cveId}`); + } + + saveLastProcessedCVE(cveId); // ✨ Save after each successful CVE + await new Promise(r => setTimeout(r, 6000)); // Sleep to respect rate limit + } catch (err) { + log(`⌠Failed to fetch/enrich ${cveId}: ${err.message}`); + } + } + + log('✅ CVE enrichment batch complete!'); + fs.unlinkSync(RESUME_FILE); // ✨ Cleanup resume file if done + await DB.end(); + logFile.end(); +} + +async function importCVEEnrichmentFast() { + log(`🚀 Starting FAST CVE enrichment by modified date...`); + + const now = new Date(); + const earliestDate = new Date('2002-01-01T00:00:00.000Z'); + let endDateObj = new Date(); // most recent + const STEP_DAYS = 120; + + while (endDateObj > earliestDate) { + const startDateObj = new Date(endDateObj); + startDateObj.setDate(startDateObj.getDate() - STEP_DAYS); + + const startISO = startDateObj.toISOString(); + const endISO = endDateObj.toISOString(); + const humanRange = `${formatShortDate(startISO)} to ${formatShortDate(endISO)}`; + + log(`📅 Fetching modified CVEs from ${humanRange}`); + + let startIndex = 0; + let totalResults = 0; + let processedCount = 0; + let pageCount = 0; + + try { + const initial = await fetchCVEPage(0, startISO, endISO); + totalResults = initial.totalResults || 0; + + if (totalResults === 0) { + log(`âš ï¸ No CVEs to process in this window.`); + endDateObj = startDateObj; + continue; + } + + log(`📦 Found ${totalResults} CVEs to enrich from ${humanRange}`); + + while (startIndex < totalResults) { + const data = startIndex === 0 ? initial : await fetchCVEPage(startIndex, startISO, endISO); + const vulnerabilities = data.vulnerabilities || []; + + log(`📄 Page ${++pageCount} — ${vulnerabilities.length} CVEs (Index ${startIndex})`); + + for (const vuln of vulnerabilities) { + await processCVE(vuln); + processedCount++; + if (processedCount % 100 === 0 || processedCount === totalResults) { + const pct = ((processedCount / totalResults) * 100).toFixed(1); + log(`📊 Progress: ${processedCount}/${totalResults} CVEs (${pct}%)`); + } + } + + startIndex += RESULTS_PER_PAGE; + await new Promise(r => setTimeout(r, 6000)); // API rate limit + } + + } catch (err) { + log(`⌠Error during enrichment for ${humanRange}: ${err.message}`); + } + + endDateObj = startDateObj; // 🕒 step backward + } + + log('✅ Full enrichment pass complete!'); + await DB.end(); + logFile.end(); +} + + + + +importCVEEnrichmentFast().catch((err) => { + log(`⌠Fatal error during enrichment: ${err.message}`); + logFile.end(); +}); + diff --git a/scripts/fetchCVE_withMORE.js b/scripts/fetchCVE_withMORE.js new file mode 100644 index 0000000..60d0013 --- /dev/null +++ b/scripts/fetchCVE_withMORE.js @@ -0,0 +1,298 @@ +#!/usr/bin/env node + +import fs from 'fs'; +import axios from 'axios'; +import mysql from 'mysql2/promise'; + +const logFile = fs.createWriteStream('cve-sync.log', { + flags: 'a', + encoding: 'utf8', +}); + +const RESUME_FILE = '.last_synced_date'; +function saveLastSyncedDate(dateStr) { + fs.writeFileSync(RESUME_FILE, dateStr); +} + +function loadLastSyncedDate() { + if (!fs.existsSync(RESUME_FILE)) return null; + return fs.readFileSync(RESUME_FILE, 'utf8'); +} + + +function log(msg) { + const now = new Date(); + + // Generate the locale string with hour12 enabled (e.g. "14 Apr 2025, 08:14:42 AM") + const raw = now.toLocaleString('en-AU', { + day: '2-digit', + month: 'short', + year: 'numeric', + hour: '2-digit', + minute: '2-digit', + second: '2-digit', + hour12: true, + }); + + // Regex to convert only the AM/PM to lowercase + const formatted = raw.replace(/\b(AM|PM)\b/, (match) => match.toLowerCase()); + + const timestamp = `[${formatted}]`; + const line = `${timestamp} ${msg}`; + console.log(line); + logFile.write(`${line}\n`); +} + + + +function formatDate(isoString) { + if (!isoString) return null; + const date = new Date(isoString); + return date.toISOString().slice(0, 19).replace('T', ' '); +} + +function formatShortDate(isoString) { + return new Date(isoString).toLocaleDateString('en-AU', { + day: '2-digit', + month: 'short', + year: 'numeric', + }).replace(/\b([A-Z])([a-z]+)\b/, (_, a, b) => a + b); // Capitalize only first letter of month +} + + +function extractCpeParts(cpe) { + const parts = cpe.split(':'); + return { + vendor: parts[3] || null, + product: parts[4] || null, + version: parts[5] || null + }; +} + +function addDaysToISO(dateISO, days) { + const date = new Date(dateISO); + date.setDate(date.getDate() + days); + return date.toISOString(); +} + +const DB = await mysql.createConnection({ + host: process.env.DB_HOST, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME, +}); + +const BASE_URL = 'https://services.nvd.nist.gov/rest/json/cves/2.0'; +const API_KEY = process.env.NVD_API_KEY; +const RESULTS_PER_PAGE = 2000; +let MAX_RANGE_DAYS = Number(process.env.NVD_MAX_RANGE_DAYS || 120); + +log(`🧪 Getting CVEs from the last ${MAX_RANGE_DAYS} of days`); + +if (MAX_RANGE_DAYS > 120) { + log("âš ï¸ MAX_RANGE_DAYS exceeds NVD API limit. Defaulting to 120."); + MAX_RANGE_DAYS = 120; +} +if (isNaN(MAX_RANGE_DAYS) || MAX_RANGE_DAYS < 1) { + log("âš ï¸ Invalid MAX_RANGE_DAYS. Using default of 7."); + MAX_RANGE_DAYS = 7; +} + +async function fetchCVEPage(startIndex, startDate, endDate) { + try { + const res = await axios.get(BASE_URL, { + params: { + pubStartDate: startDate, + pubEndDate: endDate, + startIndex, + resultsPerPage: RESULTS_PER_PAGE, + }, + headers: API_KEY ? { apiKey: API_KEY } : {} + }); + + return res.data; + } catch (err) { + log(`⌠API error: ${err.response?.status} - ${err.response?.data?.message || err.message}`); + throw err; + } +} + +async function processCVE(cveWrapper) { + const cve = cveWrapper.cve; + const cveId = cve.id; + const title = cve.titles?.find(t => t.lang === 'en')?.title || ''; + const desc = cve.descriptions.find(d => d.lang === 'en')?.value ?? ''; + const published = formatDate(cve.published); + const modified = formatDate(cve.lastModified); + const metric = cve.metrics?.cvssMetricV31?.[0]; + const severity = metric?.cvssData?.baseSeverity ?? null; + const score = metric?.cvssData?.baseScore ?? null; + const vector = metric?.cvssData?.vectorString ?? ''; + + try { + await DB.execute( + `INSERT INTO cves (id, title, description, published_date, last_modified_date, severity, cvss_score, cvss_vector, source) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE + last_modified_date = VALUES(last_modified_date), + severity = IFNULL(severity, VALUES(severity)), + cvss_score = IFNULL(cvss_score, VALUES(cvss_score)), + cvss_vector = IFNULL(cvss_vector, VALUES(cvss_vector)), + title = IFNULL(title, VALUES(title)), + source = IFNULL(source, VALUES(source))`, + [cveId, title, desc, published, modified, severity, score, vector, 'NVD'] + ); + } catch (err) { + log(`⌠Error inserting CVE ${cveId}: ${err.message}`); + } + + const configurations = cve.configurations ?? []; + for (const node of configurations) { + for (const match of node.nodes?.flatMap(n => n.cpeMatch ?? []) ?? []) { + const cpe = match.criteria; + const vulnerable = match.vulnerable ? 1 : 0; + const start = match.versionStartIncluding || match.versionStartExcluding || null; + const end = match.versionEndIncluding || match.versionEndExcluding || null; + + const { vendor, product, version } = extractCpeParts(cpe); + + try { + await DB.execute( + `INSERT INTO cpe_matches (cve_id, cpe_uri, version_start, version_end, vulnerable, vendor, product, version) + VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, + [cveId, cpe, start, end, vulnerable, vendor, product, version] + ); + } catch (err) { + log(`âš ï¸ Error inserting CPE for CVE ${cveId}: ${err.message}`); + } + } + } +} + +async function getMostRecentModifiedDateFromDB() { + const [rows] = await DB.query(`SELECT MAX(last_modified_date) AS lastMod FROM cves`); + const lastMod = rows[0]?.lastMod; + return lastMod ? new Date(lastMod).toISOString() : '2020-01-01T00:00:00.000Z'; +} + +async function importCVEFeed() { + const now = new Date(); + const endDate = now.toISOString(); + + const startDateObj = new Date(now); + startDateObj.setDate(startDateObj.getDate() - MAX_RANGE_DAYS); + const startDate = startDateObj.toISOString(); + + log(`🚀 CVE sync started`); + log(`🔄 Initializing script...`); + log(`📠Launching script`); + log(`📅 Starting CVE sync from ${startDate} to ${endDate}`); + + const humanStart = formatShortDate(startDate); + const humanEnd = formatShortDate(endDate); + log(`📡 Fetching modified CVEs from ${humanStart} to ${humanEnd}...`); + + let startIndex = 0; + let totalResults = Infinity; + let pageCount = 0; + + do { + const data = await fetchCVEPage(startIndex, startDate, endDate); + const vulnerabilities = data.vulnerabilities || []; + totalResults = data.totalResults ?? vulnerabilities.length; + + if (vulnerabilities.length === 0) { + log(`âš ï¸ No CVEs returned at index ${startIndex}`); + break; + } + + log(`📄 Page ${++pageCount} — Processing ${vulnerabilities.length} CVEs from index ${startIndex} of ~${totalResults}`); + + for (const vuln of vulnerabilities) { + await processCVE(vuln); + } + + startIndex += RESULTS_PER_PAGE; + await new Promise((r) => setTimeout(r, 6000)); + } while (startIndex < totalResults); + + log('✅ CVE import complete!'); + await DB.end(); + logFile.end(); +} + +async function importCVEFeedBackfill() { + const now = new Date(); + const resumeFrom = loadLastSyncedDate(); + let startFrom = resumeFrom ? new Date(resumeFrom) : now; + + const MAX_RANGE_DAYS = 120; + + log(resumeFrom + ? `🔠Resuming CVE backfill from ${formatShortDate(startFrom.toISOString())}` + : `â®ï¸ Starting CVE backfill from today (${formatShortDate(startFrom.toISOString())})` + ); + + while (true) { + const end = new Date(startFrom); + const start = new Date(startFrom); + start.setDate(start.getDate() - MAX_RANGE_DAYS + 1); // 120-day window + + const startISO = start.toISOString(); + const endISO = end.toISOString(); + const humanRange = `${formatShortDate(startISO)} to ${formatShortDate(endISO)}`; + + log(`📡 Fetching published CVEs from ${humanRange}...`); + + let startIndex = 0; + let totalResults = Infinity; + let pageCount = 0; + + try { + do { + const data = await fetchCVEPage(startIndex, startISO, endISO); + const vulnerabilities = data.vulnerabilities || []; + totalResults = data.totalResults ?? vulnerabilities.length; + + if (vulnerabilities.length === 0) { + log(`âš ï¸ No CVEs returned for ${humanRange} at index ${startIndex}`); + break; + } + + log(`📄 Page ${++pageCount} — ${vulnerabilities.length} CVEs from index ${startIndex}`); + + for (const vuln of vulnerabilities) { + await processCVE(vuln); + } + + startIndex += RESULTS_PER_PAGE; + await new Promise((r) => setTimeout(r, 6000)); + } while (startIndex < totalResults); + + // Move the window backward + saveLastSyncedDate(start.toISOString()); + startFrom = start; + } catch (err) { + log(`⌠Error during ${humanRange}: ${err.message}`); + break; + } + + if (start < new Date('2002-01-01')) { + log(`🛑 Reached earliest supported CVE publication date — halting backfill.`); + break; + } + } + + log('✅ CVE backfill complete!'); + await DB.end(); + logFile.end(); +} + + + +//importCVEFeed().catch((err) => { +importCVEFeedBackfill(9000) // ~25 years (goes back to 2000) +.catch((err) => { + log(`⌠Fatal error during import: ${err.message}`); + logFile.end(); +}); diff --git a/scripts/fetchKEV.js b/scripts/fetchKEV.js new file mode 100644 index 0000000..02cec7f --- /dev/null +++ b/scripts/fetchKEV.js @@ -0,0 +1,79 @@ +// fetchKEV.js +import fs from 'fs'; +import axios from 'axios'; +import mysql from 'mysql2/promise'; + +const KEV_URL = 'https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json'; + +const DB = await mysql.createConnection({ + host: process.env.DB_HOST, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME, +}); +fs.writeFileSync('kev-sync.log', '', { flag: 'w' }); // 👈 Reset the log file cleanly + +function log(msg) { + const now = new Date().toLocaleString('en-AU', { + day: '2-digit', month: 'short', year: 'numeric', + hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: true + }).replace(/\b(AM|PM)\b/, m => m.toLowerCase()); + + const line = `[${now}] ${msg}`; + console.log(line); + fs.appendFileSync('kev-sync.log', `${line}\n`); +} + +function safeDate(input) { + return input ? new Date(input).toISOString().slice(0, 10) : null; +} + +async function fetchAndInsertKEVs() { + log('🚀 Starting KEV fetch from CISA...'); + + const { data } = await axios.get(KEV_URL); + const vulns = data.vulnerabilities; + + let inserted = 0; + + for (const v of vulns) { + try { + await DB.execute(` + INSERT INTO kev_catalog ( + cve_id, vendor_project, product, vulnerability_name, + date_added, short_description, required_action, due_date, + known_ransomware_campaign_use, notes + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE + date_added = VALUES(date_added), + short_description = VALUES(short_description), + required_action = VALUES(required_action), + due_date = VALUES(due_date), + known_ransomware_campaign_use = VALUES(known_ransomware_campaign_use), + notes = VALUES(notes) + `, [ + v.cveID, + v.vendorProject, + v.product, + v.vulnerabilityName, + safeDate(v.dateAdded), + v.shortDescription, + v.requiredAction, + safeDate(v.dueDate), + v.knownRansomwareCampaignUse ?? null, + v.notes ?? null + ]); + inserted++; + } catch (err) { + log(`⌠Failed to insert ${v.cveID}: ${err.message}`); + } + } + + log(`✅ Finished KEV sync. Inserted/updated: ${inserted}`); + await DB.end(); +} + +fetchAndInsertKEVs().catch(err => { + log(`⌠Uncaught error: ${err.message}`); + DB.end(); +}); \ No newline at end of file diff --git a/scripts/fetchMSRC.js b/scripts/fetchMSRC.js new file mode 100644 index 0000000..641a749 --- /dev/null +++ b/scripts/fetchMSRC.js @@ -0,0 +1,193 @@ +#!/usr/bin/env node + +import axios from 'axios'; +import mysql from 'mysql2/promise'; +import dotenv from 'dotenv'; +import readline from 'readline'; + +dotenv.config({ path: '.env.local' }); + +const DB = await mysql.createConnection({ + host: process.env.DB_HOST, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME, +}); + +function formatDate(isoString) { + if (!isoString) return null; + const date = new Date(isoString); + return date.toISOString().slice(0, 19).replace('T', ' '); +} + +function getPreviousMonthID() { + const now = new Date(); + now.setMonth(now.getMonth() - 1); + const year = now.getFullYear(); + const month = now.toLocaleString('en-US', { month: 'short' }); // e.g. "Mar" + return `${year}-${month}`; +} + +function getLocalizedText(entry, fallback = '') { + if (!entry || typeof entry !== 'object') return fallback; + + // Try to get English (US) first + if (entry['en-US']?.Value) return entry['en-US'].Value; + + // Fallback: get first entry with a Value field + for (const key in entry) { + if (entry[key]?.Value) { + return entry[key].Value; + } + } + + return fallback; +} + + +function extractDescription(notes = [], fallback = '') { + const note = notes.find(n => + n.Title === 'Description' && + n.Type === 2 && + typeof n.Value === 'string' && + n.Value.trim().length > 0 + ); + return note?.Value || fallback; +} + + + + +function extractAffectedProducts(vuln) { + const fixed = vuln.ProductStatuses?.Fixed ?? []; + const known = vuln.ProductStatuses?.KnownAffected ?? []; + const underInvestigation = vuln.ProductStatuses?.UnderInvestigation ?? []; + return [...new Set([...fixed, ...known, ...underInvestigation])].join(', '); +} + +async function fetchCVRFDoc(cvrfId) { + const url = `https://api.msrc.microsoft.com/cvrf/v3.0/cvrf/${cvrfId}`; + try { + const res = await axios.get(url, { + headers: { 'Accept': 'application/json' } + }); + return res.data; + } catch (err) { + console.error(`⌠Failed to fetch CVRF for ${cvrfId}:`, err.message); + return null; + } +} + +async function storeVulnerability(v, published, modified) { + const cve = v.CVE; + console.log(`â³ Saving ${cve}...`); + const title = getLocalizedText(v.Title, ''); + const description = extractDescription(v.Notes, title); + const affectedProducts = extractAffectedProducts(v); + const severity = v.Threats?.find(t => t.Type === 'Severity')?.Description?.Value || ''; + const impact = v.Threats?.find(t => t.Type === 'Impact')?.Description?.Value || ''; + const exploitability = v.Threats?.find(t => t.Type === 'Exploitability')?.Description?.Value || ''; + const cvssSet = v.CVSSScoreSets?.[0]; + const cvssScore = cvssSet?.BaseScore || null; + const cvssVector = cvssSet?.Vector || ''; + const cweList = Array.isArray(v.CWE) ? v.CWE : []; + + if (!title) { + console.warn(`âš ï¸ No title found for ${cve}`); + console.debug('Title raw:', JSON.stringify(v.Title, null, 2)); + } + + if (!description) { + console.warn(`âš ï¸ No description for ${cve}`); + console.debug('Notes raw:', JSON.stringify(v.Notes, null, 2)); + } + + + try { + // Insert or update the main CVE entry (no cwe column now) + await DB.execute( + `INSERT INTO microsoft_cves (cve_id, title, severity, published_date, last_modified_date, + affected_products, description, exploitability, cvss_score, cvss_vector) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE last_modified_date = VALUES(last_modified_date), + affected_products = VALUES(affected_products), + severity = VALUES(severity), + description = VALUES(description), + exploitability = VALUES(exploitability), + cvss_score = VALUES(cvss_score), + cvss_vector = VALUES(cvss_vector)`, + [cve, title, severity, published, modified, affectedProducts, description, exploitability, cvssScore, cvssVector] + ); + + // Insert CWE entries and links + for (const { ID: cweId, Value: cweName } of cweList) { + if (!cweId) continue; + + // Insert into cwe_entries if not already present + await DB.execute( + `INSERT IGNORE INTO cwe_entries (cwe_id, cwe_name) VALUES (?, ?)`, + [cweId, cweName || null] + ); + + // Link CVE to CWE + await DB.execute( + `INSERT IGNORE INTO cve_cwe (cve_id, cwe_id) VALUES (?, ?)`, + [cve, cweId] + ); + } + + console.log(`✅ Saved ${cve} — ${severity}, ${cvssScore ?? '?'}`); + } catch (err) { + console.error(`⌠DB error for ${cve}:`, err.message); + } +} + + + +function waitForKeypress() { + return new Promise((resolve) => { + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + rl.question('🔄 Press any key to continue to the next 10 CVEs...', () => { + rl.close(); + resolve(); + }); + }); +} + +async function importPreviousMonth() { + const cvrfId = getPreviousMonthID(); + console.log(`📡 Fetching CVEs for ${cvrfId}...`); + + const data = await fetchCVRFDoc(cvrfId); + if (!data) { + console.log("⌠No data returned from MSRC."); + return; + } + + const published = formatDate(data.DocumentTracking?.InitialReleaseDate); + const modified = formatDate(data.DocumentTracking?.CurrentReleaseDate); + + const vulns = data.Vulnerability || []; + console.log(`📋 Found ${vulns.length} vulnerabilities to import.`); + + const batchSize = 10; + + for (let i = 0; i < vulns.length; i += batchSize) { + const batch = vulns.slice(i, i + batchSize); + console.log(`🔄 Processing batch ${i / batchSize + 1} (${batch.length} items)...`); + + for (const v of batch) { + await storeVulnerability(v, published, modified); + } + } + + console.log(`✅ Finished importing ${vulns.length} CVEs for ${cvrfId}`); + await DB.end(); +} +console.log("🚀 Starting MSRC sync now..."); +await importPreviousMonth(); + diff --git a/scripts/kev-sync.log b/scripts/kev-sync.log new file mode 100644 index 0000000..e959fb5 --- /dev/null +++ b/scripts/kev-sync.log @@ -0,0 +1,5 @@ +[29 Apr 2025, 11:56:08 am] 🚀 Starting KEV fetch from CISA... +[29 Apr 2025, 11:56:08 am] 🚀 Starting KEV fetch from CISA... +[29 Apr 2025, 11:56:08 am] ✅ Finished KEV sync. Inserted/updated: 1326 +[29 Apr 2025, 11:56:08 am] ✅ Finished KEV sync. Inserted/updated: 1326 +[29 Apr 2025, 11:56:08 am] ✅ fetchKEV.js finished with exit code: 0 diff --git a/scripts/msrc-sync.log b/scripts/msrc-sync.log new file mode 100644 index 0000000..db30478 --- /dev/null +++ b/scripts/msrc-sync.log @@ -0,0 +1,6978 @@ +[16 Apr 2025, 01:32:39 pm] 🚀 📡 MSRC sync launched in background. +🚀 Starting MSRC enrichment of CVEs... +📡 Fetching CVEs for 2025-Mar... +📋 Found 537 vulnerabilities. +â³ Processing CVE-2025-24513... +🧪 Raw Title for CVE-2025-24513: { + "Value": "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +} +âž¡ï¸ Parsed Title: "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +✅ Updated CVE-2025-24513 in master table +â³ Processing CVE-2025-24035... +🧪 Raw Title for CVE-2025-24035: { + "Value": "Windows Remote Desktop Services Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Remote Desktop Services Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24035 in master table +â³ Processing CVE-2024-9157... +🧪 Raw Title for CVE-2024-9157: { + "Value": "Synaptics: CVE-2024-9157 Synaptics Service Binaries DLL Loading Vulnerability" +} +âž¡ï¸ Parsed Title: "Synaptics: CVE-2024-9157 Synaptics Service Binaries DLL Loading Vulnerability" +✅ Updated CVE-2024-9157 in master table +â³ Processing CVE-2025-24044... +🧪 Raw Title for CVE-2025-24044: { + "Value": "Windows Win32 Kernel Subsystem Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Win32 Kernel Subsystem Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24044 in master table +â³ Processing CVE-2025-24043... +🧪 Raw Title for CVE-2025-24043: { + "Value": "WinDbg Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "WinDbg Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24043 in master table +â³ Processing CVE-2025-24057... +🧪 Raw Title for CVE-2025-24057: { + "Value": "Microsoft Office Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Office Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24057 in master table +â³ Processing CVE-2025-24070... +🧪 Raw Title for CVE-2025-24070: { + "Value": "ASP.NET Core and Visual Studio Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "ASP.NET Core and Visual Studio Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24070 in master table +â³ Processing CVE-2025-24077... +🧪 Raw Title for CVE-2025-24077: { + "Value": "Microsoft Word Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Word Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24077 in master table +â³ Processing CVE-2025-24078... +🧪 Raw Title for CVE-2025-24078: { + "Value": "Microsoft Word Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Word Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24078 in master table +â³ Processing CVE-2025-24079... +🧪 Raw Title for CVE-2025-24079: { + "Value": "Microsoft Word Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Word Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24079 in master table +â³ Processing CVE-2025-24080... +🧪 Raw Title for CVE-2025-24080: { + "Value": "Microsoft Office Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Office Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24080 in master table +â³ Processing CVE-2025-24081... +🧪 Raw Title for CVE-2025-24081: { + "Value": "Microsoft Excel Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Excel Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24081 in master table +â³ Processing CVE-2025-24082... +🧪 Raw Title for CVE-2025-24082: { + "Value": "Microsoft Excel Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Excel Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24082 in master table +â³ Processing CVE-2025-24083... +🧪 Raw Title for CVE-2025-24083: { + "Value": "Microsoft Office Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Office Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24083 in master table +â³ Processing CVE-2025-24986... +🧪 Raw Title for CVE-2025-24986: { + "Value": "Azure Promptflow Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Azure Promptflow Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24986 in master table +â³ Processing CVE-2025-24987... +🧪 Raw Title for CVE-2025-24987: { + "Value": "Windows USB Video Class System Driver Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows USB Video Class System Driver Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24987 in master table +â³ Processing CVE-2025-24988... +🧪 Raw Title for CVE-2025-24988: { + "Value": "Windows USB Video Class System Driver Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows USB Video Class System Driver Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24988 in master table +â³ Processing CVE-2025-21180... +🧪 Raw Title for CVE-2025-21180: { + "Value": "Windows exFAT File System Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows exFAT File System Remote Code Execution Vulnerability" +✅ Updated CVE-2025-21180 in master table +â³ Processing CVE-2025-24995... +🧪 Raw Title for CVE-2025-24995: { + "Value": "Kernel Streaming WOW Thunk Service Driver Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Kernel Streaming WOW Thunk Service Driver Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24995 in master table +â³ Processing CVE-2025-24996... +🧪 Raw Title for CVE-2025-24996: { + "Value": "NTLM Hash Disclosure Spoofing Vulnerability" +} +âž¡ï¸ Parsed Title: "NTLM Hash Disclosure Spoofing Vulnerability" +✅ Updated CVE-2025-24996 in master table +â³ Processing CVE-2025-24997... +🧪 Raw Title for CVE-2025-24997: { + "Value": "DirectX Graphics Kernel File Denial of Service Vulnerability" +} +âž¡ï¸ Parsed Title: "DirectX Graphics Kernel File Denial of Service Vulnerability" +✅ Updated CVE-2025-24997 in master table +â³ Processing CVE-2025-24998... +🧪 Raw Title for CVE-2025-24998: { + "Value": "Visual Studio Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Visual Studio Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24998 in master table +â³ Processing CVE-2025-25003... +🧪 Raw Title for CVE-2025-25003: { + "Value": "Visual Studio Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Visual Studio Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-25003 in master table +â³ Processing CVE-2025-25008... +🧪 Raw Title for CVE-2025-25008: { + "Value": "Windows Server Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Server Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-25008 in master table +â³ Processing CVE-2025-1919... +🧪 Raw Title for CVE-2025-1919: { + "Value": "Chromium: CVE-2025-1919 Out of bounds read in Media" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1919 Out of bounds read in Media" +✅ Updated CVE-2025-1919 in master table +â³ Processing CVE-2025-1916... +🧪 Raw Title for CVE-2025-1916: { + "Value": "Chromium: CVE-2025-1916 Use after free in Profiles" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1916 Use after free in Profiles" +✅ Updated CVE-2025-1916 in master table +â³ Processing CVE-2025-1918... +🧪 Raw Title for CVE-2025-1918: { + "Value": "Chromium: CVE-2025-1918 Out of bounds read in PDFium" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1918 Out of bounds read in PDFium" +✅ Updated CVE-2025-1918 in master table +â³ Processing CVE-2025-1917... +🧪 Raw Title for CVE-2025-1917: { + "Value": "Chromium: CVE-2025-1917 Inappropriate Implementation in Browser UI" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1917 Inappropriate Implementation in Browser UI" +✅ Updated CVE-2025-1917 in master table +â³ Processing CVE-2025-1921... +🧪 Raw Title for CVE-2025-1921: { + "Value": "Chromium: CVE-2025-1921 Inappropriate Implementation in Media Stream" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1921 Inappropriate Implementation in Media Stream" +✅ Updated CVE-2025-1921 in master table +â³ Processing CVE-2025-1915... +🧪 Raw Title for CVE-2025-1915: { + "Value": "Chromium: CVE-2025-1915 Improper Limitation of a Pathname to a Restricted Directory in DevTools" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1915 Improper Limitation of a Pathname to a Restricted Directory in DevTools" +✅ Updated CVE-2025-1915 in master table +â³ Processing CVE-2025-1923... +🧪 Raw Title for CVE-2025-1923: { + "Value": "Chromium: CVE-2025-1923 Inappropriate Implementation in Permission Prompts" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1923 Inappropriate Implementation in Permission Prompts" +✅ Updated CVE-2025-1923 in master table +â³ Processing CVE-2025-1922... +🧪 Raw Title for CVE-2025-1922: { + "Value": "Chromium: CVE-2025-1922 Inappropriate Implementation in Selection" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1922 Inappropriate Implementation in Selection" +✅ Updated CVE-2025-1922 in master table +â³ Processing CVE-2025-1914... +🧪 Raw Title for CVE-2025-1914: { + "Value": "Chromium: CVE-2025-1914 Out of bounds read in V8" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1914 Out of bounds read in V8" +✅ Updated CVE-2025-1914 in master table +â³ Processing CVE-2025-2135... +🧪 Raw Title for CVE-2025-2135: { + "Value": "Chromium: CVE-2025-2135 Type Confusion in V8" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-2135 Type Confusion in V8" +✅ Updated CVE-2025-2135 in master table +â³ Processing CVE-2025-1920... +🧪 Raw Title for CVE-2025-1920: { + "Value": "Chromium: CVE-2025-1920 Type Confusion in V8" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1920 Type Confusion in V8" +✅ Updated CVE-2025-1920 in master table +â³ Processing CVE-2025-29807... +🧪 Raw Title for CVE-2025-29807: { + "Value": "Microsoft Dataverse Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Dataverse Remote Code Execution Vulnerability" +✅ Updated CVE-2025-29807 in master table +â³ Processing CVE-2025-29814... +🧪 Raw Title for CVE-2025-29814: { + "Value": "Microsoft Partner Center Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Partner Center Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-29814 in master table +â³ Processing CVE-2025-2476... +🧪 Raw Title for CVE-2025-2476: { + "Value": "Chromium: CVE-2025-2476 Use after free in Lens" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-2476 Use after free in Lens" +✅ Updated CVE-2025-2476 in master table +â³ Processing CVE-2025-26683... +🧪 Raw Title for CVE-2025-26683: { + "Value": "Azure Playwright Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Azure Playwright Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-26683 in master table +â³ Processing CVE-2025-21384... +🧪 Raw Title for CVE-2025-21384: { + "Value": "Azure Health Bot Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Azure Health Bot Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-21384 in master table +â³ Processing CVE-2025-21247... +🧪 Raw Title for CVE-2025-21247: { + "Value": "MapUrlToZone Security Feature Bypass Vulnerability" +} +âž¡ï¸ Parsed Title: "MapUrlToZone Security Feature Bypass Vulnerability" +✅ Updated CVE-2025-21247 in master table +â³ Processing CVE-2025-21199... +🧪 Raw Title for CVE-2025-21199: { + "Value": "Azure Agent Installer for Backup and Site Recovery Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Azure Agent Installer for Backup and Site Recovery Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-21199 in master table +â³ Processing CVE-2025-24045... +🧪 Raw Title for CVE-2025-24045: { + "Value": "Windows Remote Desktop Services Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Remote Desktop Services Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24045 in master table +â³ Processing CVE-2025-24046... +🧪 Raw Title for CVE-2025-24046: { + "Value": "Kernel Streaming Service Driver Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Kernel Streaming Service Driver Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24046 in master table +â³ Processing CVE-2025-24048... +🧪 Raw Title for CVE-2025-24048: { + "Value": "Windows Hyper-V Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Hyper-V Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24048 in master table +â³ Processing CVE-2025-24050... +🧪 Raw Title for CVE-2025-24050: { + "Value": "Windows Hyper-V Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Hyper-V Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24050 in master table +â³ Processing CVE-2025-24051... +🧪 Raw Title for CVE-2025-24051: { + "Value": "Windows Routing and Remote Access Service (RRAS) Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Routing and Remote Access Service (RRAS) Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24051 in master table +â³ Processing CVE-2025-24054... +🧪 Raw Title for CVE-2025-24054: { + "Value": "NTLM Hash Disclosure Spoofing Vulnerability" +} +âž¡ï¸ Parsed Title: "NTLM Hash Disclosure Spoofing Vulnerability" +✅ Updated CVE-2025-24054 in master table +â³ Processing CVE-2025-24055... +🧪 Raw Title for CVE-2025-24055: { + "Value": "Windows USB Video Class System Driver Information Disclosure Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows USB Video Class System Driver Information Disclosure Vulnerability" +✅ Updated CVE-2025-24055 in master table +â³ Processing CVE-2025-24056... +🧪 Raw Title for CVE-2025-24056: { + "Value": "Windows Telephony Service Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Telephony Service Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24056 in master table +â³ Processing CVE-2025-24059... +🧪 Raw Title for CVE-2025-24059: { + "Value": "Windows Common Log File System Driver Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Common Log File System Driver Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24059 in master table +â³ Processing CVE-2025-24061... +🧪 Raw Title for CVE-2025-24061: { + "Value": "Windows Mark of the Web Security Feature Bypass Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Mark of the Web Security Feature Bypass Vulnerability" +✅ Updated CVE-2025-24061 in master table +â³ Processing CVE-2025-24064... +🧪 Raw Title for CVE-2025-24064: { + "Value": "Windows Domain Name Service Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Domain Name Service Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24064 in master table +â³ Processing CVE-2025-24066... +🧪 Raw Title for CVE-2025-24066: { + "Value": "Kernel Streaming Service Driver Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Kernel Streaming Service Driver Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24066 in master table +â³ Processing CVE-2025-24067... +🧪 Raw Title for CVE-2025-24067: { + "Value": "Kernel Streaming Service Driver Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Kernel Streaming Service Driver Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24067 in master table +â³ Processing CVE-2025-24072... +🧪 Raw Title for CVE-2025-24072: { + "Value": "Microsoft Local Security Authority (LSA) Server Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Local Security Authority (LSA) Server Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24072 in master table +â³ Processing CVE-2025-24075... +🧪 Raw Title for CVE-2025-24075: { + "Value": "Microsoft Excel Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Excel Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24075 in master table +â³ Processing CVE-2025-24076... +🧪 Raw Title for CVE-2025-24076: { + "Value": "Microsoft Windows Cross Device Service Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Windows Cross Device Service Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24076 in master table +â³ Processing CVE-2025-24084... +🧪 Raw Title for CVE-2025-24084: { + "Value": "Windows Subsystem for Linux (WSL2) Kernel Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Subsystem for Linux (WSL2) Kernel Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24084 in master table +â³ Processing CVE-2025-24983... +🧪 Raw Title for CVE-2025-24983: { + "Value": "Windows Win32 Kernel Subsystem Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Win32 Kernel Subsystem Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24983 in master table +â³ Processing CVE-2025-24984... +🧪 Raw Title for CVE-2025-24984: { + "Value": "Windows NTFS Information Disclosure Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows NTFS Information Disclosure Vulnerability" +✅ Updated CVE-2025-24984 in master table +â³ Processing CVE-2025-24985... +🧪 Raw Title for CVE-2025-24985: { + "Value": "Windows Fast FAT File System Driver Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Fast FAT File System Driver Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24985 in master table +â³ Processing CVE-2025-24991... +🧪 Raw Title for CVE-2025-24991: { + "Value": "Windows NTFS Information Disclosure Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows NTFS Information Disclosure Vulnerability" +✅ Updated CVE-2025-24991 in master table +â³ Processing CVE-2025-24992... +🧪 Raw Title for CVE-2025-24992: { + "Value": "Windows NTFS Information Disclosure Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows NTFS Information Disclosure Vulnerability" +✅ Updated CVE-2025-24992 in master table +â³ Processing CVE-2025-24993... +🧪 Raw Title for CVE-2025-24993: { + "Value": "Windows NTFS Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows NTFS Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24993 in master table +â³ Processing CVE-2025-24994... +🧪 Raw Title for CVE-2025-24994: { + "Value": "Microsoft Windows Cross Device Service Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Windows Cross Device Service Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24994 in master table +â³ Processing CVE-2025-24049... +🧪 Raw Title for CVE-2025-24049: { + "Value": "Azure Command Line Integration (CLI) Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Azure Command Line Integration (CLI) Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24049 in master table +â³ Processing CVE-2025-26627... +🧪 Raw Title for CVE-2025-26627: { + "Value": "Azure Arc Installer Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Azure Arc Installer Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-26627 in master table +â³ Processing CVE-2025-26629... +🧪 Raw Title for CVE-2025-26629: { + "Value": "Microsoft Office Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Office Remote Code Execution Vulnerability" +✅ Updated CVE-2025-26629 in master table +â³ Processing CVE-2025-26630... +🧪 Raw Title for CVE-2025-26630: { + "Value": "Microsoft Access Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Access Remote Code Execution Vulnerability" +✅ Updated CVE-2025-26630 in master table +â³ Processing CVE-2025-26631... +🧪 Raw Title for CVE-2025-26631: { + "Value": "Visual Studio Code Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Visual Studio Code Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-26631 in master table +â³ Processing CVE-2025-26633... +🧪 Raw Title for CVE-2025-26633: { + "Value": "Microsoft Management Console Security Feature Bypass Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Management Console Security Feature Bypass Vulnerability" +✅ Updated CVE-2025-26633 in master table +â³ Processing CVE-2025-26643... +🧪 Raw Title for CVE-2025-26643: { + "Value": "Microsoft Edge (Chromium-based) Spoofing Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Edge (Chromium-based) Spoofing Vulnerability" +✅ Updated CVE-2025-26643 in master table +â³ Processing CVE-2025-26645... +🧪 Raw Title for CVE-2025-26645: { + "Value": "Remote Desktop Client Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Remote Desktop Client Remote Code Execution Vulnerability" +✅ Updated CVE-2025-26645 in master table +â³ Processing CVE-2025-2137... +🧪 Raw Title for CVE-2025-2137: { + "Value": "Chromium: CVE-2025-2137 Out of bounds read in V8" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-2137 Out of bounds read in V8" +✅ Updated CVE-2025-2137 in master table +â³ Processing CVE-2025-2136... +🧪 Raw Title for CVE-2025-2136: { + "Value": "Chromium: CVE-2025-2136 Use after free in Inspector" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-2136 Use after free in Inspector" +✅ Updated CVE-2025-2136 in master table +â³ Processing CVE-2025-24201... +🧪 Raw Title for CVE-2025-24201: { + "Value": "Chromium: CVE-2025-24201 Out of bounds write in GPU on Mac" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-24201 Out of bounds write in GPU on Mac" +✅ Updated CVE-2025-24201 in master table +â³ Processing CVE-2025-1097... +🧪 Raw Title for CVE-2025-1097: { + "Value": "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +} +âž¡ï¸ Parsed Title: "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +✅ Updated CVE-2025-1097 in master table +â³ Processing CVE-2025-1098... +🧪 Raw Title for CVE-2025-1098: { + "Value": "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +} +âž¡ï¸ Parsed Title: "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +✅ Updated CVE-2025-1098 in master table +â³ Processing CVE-2025-1974... +🧪 Raw Title for CVE-2025-1974: { + "Value": "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +} +âž¡ï¸ Parsed Title: "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +✅ Updated CVE-2025-1974 in master table +â³ Processing CVE-2025-24514... +🧪 Raw Title for CVE-2025-24514: { + "Value": "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +} +âž¡ï¸ Parsed Title: "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +✅ Updated CVE-2025-24514 in master table +â³ Processing CVE-2025-24053... +🧪 Raw Title for CVE-2025-24053: { + "Value": "Microsoft Dataverse Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Dataverse Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24053 in master table +â³ Processing CVE-2025-29795... +🧪 Raw Title for CVE-2025-29795: { + "Value": "Microsoft Edge (Chromium-based) Update Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Edge (Chromium-based) Update Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-29795 in master table +â³ Processing CVE-2025-2783... +🧪 Raw Title for CVE-2025-2783: { + "Value": "Chromium: CVE-2025-2783 Incorrect handle provided in unspecified circumstances in Mojo on Windows" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-2783 Incorrect handle provided in unspecified circumstances in Mojo on Windows" +✅ Updated CVE-2025-2783 in master table +â³ Processing CVE-2021-3672... +🧪 Raw Title for CVE-2021-3672: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2021-3672 in master table +â³ Processing CVE-2021-23336... +🧪 Raw Title for CVE-2021-23336: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2021-23336 in master table +â³ Processing CVE-2023-40548... +🧪 Raw Title for CVE-2023-40548: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-40548 in master table +â³ Processing CVE-2023-40550... +🧪 Raw Title for CVE-2023-40550: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-40550 in master table +â³ Processing CVE-2020-27840... +🧪 Raw Title for CVE-2020-27840: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2020-27840 in master table +â³ Processing CVE-2024-5288... +🧪 Raw Title for CVE-2024-5288: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-5288 in master table +â³ Processing CVE-2024-6104... +🧪 Raw Title for CVE-2024-6104: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-6104 in master table +â³ Processing CVE-2023-45288... +🧪 Raw Title for CVE-2023-45288: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-45288 in master table +â³ Processing CVE-2019-20907... +🧪 Raw Title for CVE-2019-20907: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2019-20907 in master table +â³ Processing CVE-2019-9674... +🧪 Raw Title for CVE-2019-9674: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2019-9674 in master table +â³ Processing CVE-2012-2677... +🧪 Raw Title for CVE-2012-2677: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2012-2677 in master table +â³ Processing CVE-2012-6708... +🧪 Raw Title for CVE-2012-6708: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2012-6708 in master table +â³ Processing CVE-2024-52338... +🧪 Raw Title for CVE-2024-52338: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-52338 in master table +â³ Processing CVE-2024-34062... +🧪 Raw Title for CVE-2024-34062: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-34062 in master table +â³ Processing CVE-2024-32020... +🧪 Raw Title for CVE-2024-32020: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-32020 in master table +â³ Processing CVE-2024-7383... +🧪 Raw Title for CVE-2024-7383: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-7383 in master table +â³ Processing CVE-2022-40898... +🧪 Raw Title for CVE-2022-40898: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-40898 in master table +â³ Processing CVE-2019-14584... +🧪 Raw Title for CVE-2019-14584: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2019-14584 in master table +â³ Processing CVE-2022-32746... +🧪 Raw Title for CVE-2022-32746: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-32746 in master table +â³ Processing CVE-2021-20277... +🧪 Raw Title for CVE-2021-20277: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2021-20277 in master table +â³ Processing CVE-2019-3816... +🧪 Raw Title for CVE-2019-3816: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2019-3816 in master table +â³ Processing CVE-2025-26466... +🧪 Raw Title for CVE-2025-26466: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26466 in master table +â³ Processing CVE-2024-50608... +🧪 Raw Title for CVE-2024-50608: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-50608 in master table +â³ Processing CVE-2025-26618... +🧪 Raw Title for CVE-2025-26618: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26618 in master table +â³ Processing CVE-2024-1454... +🧪 Raw Title for CVE-2024-1454: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-1454 in master table +â³ Processing CVE-2024-9681... +🧪 Raw Title for CVE-2024-9681: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-9681 in master table +â³ Processing CVE-2025-27144... +🧪 Raw Title for CVE-2025-27144: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27144 in master table +â³ Processing CVE-2024-50609... +🧪 Raw Title for CVE-2024-50609: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-50609 in master table +â³ Processing CVE-2023-52917... +🧪 Raw Title for CVE-2023-52917: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-52917 in master table +â³ Processing CVE-2021-36373... +🧪 Raw Title for CVE-2021-36373: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2021-36373 in master table +â³ Processing CVE-2021-36374... +🧪 Raw Title for CVE-2021-36374: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2021-36374 in master table +â³ Processing CVE-2023-40660... +🧪 Raw Title for CVE-2023-40660: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-40660 in master table +â³ Processing CVE-2024-50181... +🧪 Raw Title for CVE-2024-50181: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-50181 in master table +â³ Processing CVE-2024-56741... +🧪 Raw Title for CVE-2024-56741: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56741 in master table +â³ Processing CVE-2024-39908... +🧪 Raw Title for CVE-2024-39908: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-39908 in master table +â³ Processing CVE-2025-0840... +🧪 Raw Title for CVE-2025-0840: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-0840 in master table +â³ Processing CVE-2024-26973... +🧪 Raw Title for CVE-2024-26973: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-26973 in master table +â³ Processing CVE-2024-53150... +🧪 Raw Title for CVE-2024-53150: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53150 in master table +â³ Processing CVE-2024-53151... +🧪 Raw Title for CVE-2024-53151: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53151 in master table +â³ Processing CVE-2024-53215... +🧪 Raw Title for CVE-2024-53215: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53215 in master table +â³ Processing CVE-2024-53180... +🧪 Raw Title for CVE-2024-53180: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53180 in master table +â³ Processing CVE-2024-56568... +🧪 Raw Title for CVE-2024-56568: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56568 in master table +â³ Processing CVE-2024-56567... +🧪 Raw Title for CVE-2024-56567: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56567 in master table +â³ Processing CVE-2024-56598... +🧪 Raw Title for CVE-2024-56598: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56598 in master table +â³ Processing CVE-2024-56634... +🧪 Raw Title for CVE-2024-56634: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56634 in master table +â³ Processing CVE-2024-56640... +🧪 Raw Title for CVE-2024-56640: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56640 in master table +â³ Processing CVE-2024-56720... +🧪 Raw Title for CVE-2024-56720: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56720 in master table +â³ Processing CVE-2024-56754... +🧪 Raw Title for CVE-2024-56754: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56754 in master table +â³ Processing CVE-2024-57802... +🧪 Raw Title for CVE-2024-57802: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57802 in master table +â³ Processing CVE-2024-57807... +🧪 Raw Title for CVE-2024-57807: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57807 in master table +â³ Processing CVE-2024-57900... +🧪 Raw Title for CVE-2024-57900: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57900 in master table +â³ Processing CVE-2024-57938... +🧪 Raw Title for CVE-2024-57938: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57938 in master table +â³ Processing CVE-2024-45828... +🧪 Raw Title for CVE-2024-45828: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-45828 in master table +â³ Processing CVE-2024-47143... +🧪 Raw Title for CVE-2024-47143: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-47143 in master table +â³ Processing CVE-2024-53161... +🧪 Raw Title for CVE-2024-53161: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53161 in master table +â³ Processing CVE-2024-53155... +🧪 Raw Title for CVE-2024-53155: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53155 in master table +â³ Processing CVE-2024-55916... +🧪 Raw Title for CVE-2024-55916: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-55916 in master table +â³ Processing CVE-2024-56548... +🧪 Raw Title for CVE-2024-56548: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56548 in master table +â³ Processing CVE-2024-56600... +🧪 Raw Title for CVE-2024-56600: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56600 in master table +â³ Processing CVE-2024-56626... +🧪 Raw Title for CVE-2024-56626: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56626 in master table +â³ Processing CVE-2024-56627... +🧪 Raw Title for CVE-2024-56627: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56627 in master table +â³ Processing CVE-2024-56662... +🧪 Raw Title for CVE-2024-56662: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56662 in master table +â³ Processing CVE-2024-56659... +🧪 Raw Title for CVE-2024-56659: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56659 in master table +â³ Processing CVE-2024-56724... +🧪 Raw Title for CVE-2024-56724: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56724 in master table +â³ Processing CVE-2024-56728... +🧪 Raw Title for CVE-2024-56728: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56728 in master table +â³ Processing CVE-2024-56774... +🧪 Raw Title for CVE-2024-56774: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56774 in master table +â³ Processing CVE-2024-56777... +🧪 Raw Title for CVE-2024-56777: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56777 in master table +â³ Processing CVE-2024-57901... +🧪 Raw Title for CVE-2024-57901: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57901 in master table +â³ Processing CVE-2025-26596... +🧪 Raw Title for CVE-2025-26596: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26596 in master table +â³ Processing CVE-2025-26594... +🧪 Raw Title for CVE-2025-26594: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26594 in master table +â³ Processing CVE-2025-26595... +🧪 Raw Title for CVE-2025-26595: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26595 in master table +â³ Processing CVE-2025-26598... +🧪 Raw Title for CVE-2025-26598: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26598 in master table +â³ Processing CVE-2025-22134... +🧪 Raw Title for CVE-2025-22134: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-22134 in master table +â³ Processing CVE-2022-41862... +🧪 Raw Title for CVE-2022-41862: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-41862 in master table +â³ Processing CVE-2024-53859... +🧪 Raw Title for CVE-2024-53859: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53859 in master table +â³ Processing CVE-2024-36620... +🧪 Raw Title for CVE-2024-36620: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-36620 in master table +â³ Processing CVE-2024-10963... +🧪 Raw Title for CVE-2024-10963: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-10963 in master table +â³ Processing CVE-2023-40551... +🧪 Raw Title for CVE-2023-40551: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-40551 in master table +â³ Processing CVE-2024-56657... +🧪 Raw Title for CVE-2024-56657: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56657 in master table +â³ Processing CVE-2024-56763... +🧪 Raw Title for CVE-2024-56763: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56763 in master table +â³ Processing CVE-2024-57892... +🧪 Raw Title for CVE-2024-57892: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57892 in master table +â³ Processing CVE-2024-57980... +🧪 Raw Title for CVE-2024-57980: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57980 in master table +â³ Processing CVE-2025-21637... +🧪 Raw Title for CVE-2025-21637: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21637 in master table +â³ Processing CVE-2025-21718... +🧪 Raw Title for CVE-2025-21718: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21718 in master table +â³ Processing CVE-2024-3651... +🧪 Raw Title for CVE-2024-3651: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-3651 in master table +â³ Processing CVE-2015-2158... +🧪 Raw Title for CVE-2015-2158: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2015-2158 in master table +â³ Processing CVE-2020-14152... +🧪 Raw Title for CVE-2020-14152: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2020-14152 in master table +â³ Processing CVE-2024-56658... +🧪 Raw Title for CVE-2024-56658: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56658 in master table +â³ Processing CVE-2024-56710... +🧪 Raw Title for CVE-2024-56710: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56710 in master table +â³ Processing CVE-2024-57912... +🧪 Raw Title for CVE-2024-57912: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57912 in master table +â³ Processing CVE-2024-57978... +🧪 Raw Title for CVE-2024-57978: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57978 in master table +â³ Processing CVE-2025-21638... +🧪 Raw Title for CVE-2025-21638: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21638 in master table +â³ Processing CVE-2025-21680... +🧪 Raw Title for CVE-2025-21680: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21680 in master table +â³ Processing CVE-2025-21716... +🧪 Raw Title for CVE-2025-21716: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21716 in master table +â³ Processing CVE-2024-29195... +🧪 Raw Title for CVE-2024-29195: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-29195 in master table +â³ Processing CVE-2022-3162... +🧪 Raw Title for CVE-2022-3162: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-3162 in master table +â³ Processing CVE-2025-27219... +🧪 Raw Title for CVE-2025-27219: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27219 in master table +â³ Processing CVE-2025-27221... +🧪 Raw Title for CVE-2025-27221: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27221 in master table +â³ Processing CVE-2025-27220... +🧪 Raw Title for CVE-2025-27220: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27220 in master table +â³ Processing CVE-2024-1013... +🧪 Raw Title for CVE-2024-1013: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-1013 in master table +â³ Processing CVE-2024-8176... +🧪 Raw Title for CVE-2024-8176: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-8176 in master table +â³ Processing CVE-2024-8096... +🧪 Raw Title for CVE-2024-8096: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-8096 in master table +â³ Processing CVE-2025-22870... +🧪 Raw Title for CVE-2025-22870: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-22870 in master table +â³ Processing CVE-2024-33600... +🧪 Raw Title for CVE-2024-33600: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-33600 in master table +â³ Processing CVE-2024-33599... +🧪 Raw Title for CVE-2024-33599: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-33599 in master table +â³ Processing CVE-2025-21490... +🧪 Raw Title for CVE-2025-21490: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21490 in master table +â³ Processing CVE-2024-34397... +🧪 Raw Title for CVE-2024-34397: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-34397 in master table +â³ Processing CVE-2024-43806... +🧪 Raw Title for CVE-2024-43806: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-43806 in master table +â³ Processing CVE-2023-29942... +🧪 Raw Title for CVE-2023-29942: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-29942 in master table +â³ Processing CVE-2025-29786... +🧪 Raw Title for CVE-2025-29786: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-29786 in master table +â³ Processing CVE-2023-29935... +🧪 Raw Title for CVE-2023-29935: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-29935 in master table +â³ Processing CVE-2024-2511... +🧪 Raw Title for CVE-2024-2511: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-2511 in master table +â³ Processing CVE-2025-30348... +🧪 Raw Title for CVE-2025-30348: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-30348 in master table +â³ Processing CVE-2022-45142... +🧪 Raw Title for CVE-2022-45142: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-45142 in master table +â³ Processing CVE-2024-31580... +🧪 Raw Title for CVE-2024-31580: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-31580 in master table +â³ Processing CVE-2024-52006... +🧪 Raw Title for CVE-2024-52006: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-52006 in master table +â³ Processing CVE-2024-50349... +🧪 Raw Title for CVE-2024-50349: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-50349 in master table +â³ Processing CVE-2022-28737... +🧪 Raw Title for CVE-2022-28737: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-28737 in master table +â³ Processing CVE-2024-3727... +🧪 Raw Title for CVE-2024-3727: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-3727 in master table +â³ Processing CVE-2022-32149... +🧪 Raw Title for CVE-2022-32149: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-32149 in master table +â³ Processing CVE-2024-45338... +🧪 Raw Title for CVE-2024-45338: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-45338 in master table +â³ Processing CVE-2017-18207... +🧪 Raw Title for CVE-2017-18207: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2017-18207 in master table +â³ Processing CVE-2017-17522... +🧪 Raw Title for CVE-2017-17522: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2017-17522 in master table +â³ Processing CVE-2007-4559... +🧪 Raw Title for CVE-2007-4559: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2007-4559 in master table +â³ Processing CVE-2025-1176... +🧪 Raw Title for CVE-2025-1176: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1176 in master table +â³ Processing CVE-2025-1182... +🧪 Raw Title for CVE-2025-1182: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1182 in master table +â³ Processing CVE-2025-1181... +🧪 Raw Title for CVE-2025-1181: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1181 in master table +â³ Processing CVE-2025-1178... +🧪 Raw Title for CVE-2025-1178: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1178 in master table +â³ Processing CVE-2015-9251... +🧪 Raw Title for CVE-2015-9251: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2015-9251 in master table +â³ Processing CVE-2020-22217... +🧪 Raw Title for CVE-2020-22217: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2020-22217 in master table +â³ Processing CVE-2021-24032... +🧪 Raw Title for CVE-2021-24032: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2021-24032 in master table +â³ Processing CVE-2024-25629... +🧪 Raw Title for CVE-2024-25629: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-25629 in master table +â³ Processing CVE-2024-32465... +🧪 Raw Title for CVE-2024-32465: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-32465 in master table +â³ Processing CVE-2021-20286... +🧪 Raw Title for CVE-2021-20286: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2021-20286 in master table +â³ Processing CVE-2024-32021... +🧪 Raw Title for CVE-2024-32021: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-32021 in master table +â³ Processing CVE-2023-40549... +🧪 Raw Title for CVE-2023-40549: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-40549 in master table +â³ Processing CVE-2023-40546... +🧪 Raw Title for CVE-2023-40546: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-40546 in master table +â³ Processing CVE-2024-37535... +🧪 Raw Title for CVE-2024-37535: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-37535 in master table +â³ Processing CVE-2023-1393... +🧪 Raw Title for CVE-2023-1393: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-1393 in master table +â³ Processing CVE-2019-3833... +🧪 Raw Title for CVE-2019-3833: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2019-3833 in master table +â³ Processing CVE-2024-12133... +🧪 Raw Title for CVE-2024-12133: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-12133 in master table +â³ Processing CVE-2024-26943... +🧪 Raw Title for CVE-2024-26943: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-26943 in master table +â³ Processing CVE-2024-27026... +🧪 Raw Title for CVE-2024-27026: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-27026 in master table +â³ Processing CVE-2024-35790... +🧪 Raw Title for CVE-2024-35790: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-35790 in master table +â³ Processing CVE-2024-35792... +🧪 Raw Title for CVE-2024-35792: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-35792 in master table +â³ Processing CVE-2024-27061... +🧪 Raw Title for CVE-2024-27061: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-27061 in master table +â³ Processing CVE-2024-40982... +🧪 Raw Title for CVE-2024-40982: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-40982 in master table +â³ Processing CVE-2024-43098... +🧪 Raw Title for CVE-2024-43098: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-43098 in master table +â³ Processing CVE-2024-53146... +🧪 Raw Title for CVE-2024-53146: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53146 in master table +â³ Processing CVE-2025-22868... +🧪 Raw Title for CVE-2025-22868: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-22868 in master table +â³ Processing CVE-2024-53157... +🧪 Raw Title for CVE-2024-53157: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53157 in master table +â³ Processing CVE-2024-53156... +🧪 Raw Title for CVE-2024-53156: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53156 in master table +â³ Processing CVE-2024-53165... +🧪 Raw Title for CVE-2024-53165: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53165 in master table +â³ Processing CVE-2024-53171... +🧪 Raw Title for CVE-2024-53171: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53171 in master table +â³ Processing CVE-2024-56369... +🧪 Raw Title for CVE-2024-56369: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56369 in master table +â³ Processing CVE-2024-53227... +🧪 Raw Title for CVE-2024-53227: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53227 in master table +â³ Processing CVE-2024-53237... +🧪 Raw Title for CVE-2024-53237: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53237 in master table +â³ Processing CVE-2024-53217... +🧪 Raw Title for CVE-2024-53217: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53217 in master table +â³ Processing CVE-2024-56569... +🧪 Raw Title for CVE-2024-56569: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56569 in master table +â³ Processing CVE-2024-56572... +🧪 Raw Title for CVE-2024-56572: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56572 in master table +â³ Processing CVE-2024-56578... +🧪 Raw Title for CVE-2024-56578: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56578 in master table +â³ Processing CVE-2024-56574... +🧪 Raw Title for CVE-2024-56574: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56574 in master table +â³ Processing CVE-2024-56593... +🧪 Raw Title for CVE-2024-56593: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56593 in master table +â³ Processing CVE-2024-56622... +🧪 Raw Title for CVE-2024-56622: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56622 in master table +â³ Processing CVE-2024-56606... +🧪 Raw Title for CVE-2024-56606: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56606 in master table +â³ Processing CVE-2024-56601... +🧪 Raw Title for CVE-2024-56601: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56601 in master table +â³ Processing CVE-2024-56602... +🧪 Raw Title for CVE-2024-56602: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56602 in master table +â³ Processing CVE-2024-56698... +🧪 Raw Title for CVE-2024-56698: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56698 in master table +â³ Processing CVE-2024-56704... +🧪 Raw Title for CVE-2024-56704: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56704 in master table +â³ Processing CVE-2024-56715... +🧪 Raw Title for CVE-2024-56715: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56715 in master table +â³ Processing CVE-2024-56642... +🧪 Raw Title for CVE-2024-56642: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56642 in master table +â³ Processing CVE-2024-56716... +🧪 Raw Title for CVE-2024-56716: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56716 in master table +â³ Processing CVE-2024-56726... +🧪 Raw Title for CVE-2024-56726: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56726 in master table +â³ Processing CVE-2024-56746... +🧪 Raw Title for CVE-2024-56746: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56746 in master table +â³ Processing CVE-2024-56723... +🧪 Raw Title for CVE-2024-56723: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56723 in master table +â³ Processing CVE-2024-56739... +🧪 Raw Title for CVE-2024-56739: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56739 in master table +â³ Processing CVE-2024-56748... +🧪 Raw Title for CVE-2024-56748: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56748 in master table +â³ Processing CVE-2024-56776... +🧪 Raw Title for CVE-2024-56776: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56776 in master table +â³ Processing CVE-2024-56779... +🧪 Raw Title for CVE-2024-56779: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56779 in master table +â³ Processing CVE-2024-56778... +🧪 Raw Title for CVE-2024-56778: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56778 in master table +â³ Processing CVE-2024-56780... +🧪 Raw Title for CVE-2024-56780: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56780 in master table +â³ Processing CVE-2024-56785... +🧪 Raw Title for CVE-2024-56785: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56785 in master table +â³ Processing CVE-2024-57874... +🧪 Raw Title for CVE-2024-57874: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57874 in master table +â³ Processing CVE-2024-57896... +🧪 Raw Title for CVE-2024-57896: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57896 in master table +â³ Processing CVE-2024-57841... +🧪 Raw Title for CVE-2024-57841: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57841 in master table +â³ Processing CVE-2024-57890... +🧪 Raw Title for CVE-2024-57890: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57890 in master table +â³ Processing CVE-2024-36476... +🧪 Raw Title for CVE-2024-36476: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-36476 in master table +â³ Processing CVE-2024-57946... +🧪 Raw Title for CVE-2024-57946: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57946 in master table +â³ Processing CVE-2024-9287... +🧪 Raw Title for CVE-2024-9287: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-9287 in master table +â³ Processing CVE-2025-22869... +🧪 Raw Title for CVE-2025-22869: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-22869 in master table +â³ Processing CVE-2024-50051... +🧪 Raw Title for CVE-2024-50051: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-50051 in master table +â³ Processing CVE-2024-48881... +🧪 Raw Title for CVE-2024-48881: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-48881 in master table +â³ Processing CVE-2024-53145... +🧪 Raw Title for CVE-2024-53145: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53145 in master table +â³ Processing CVE-2024-53096... +🧪 Raw Title for CVE-2024-53096: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53096 in master table +â³ Processing CVE-2024-53206... +🧪 Raw Title for CVE-2024-53206: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53206 in master table +â³ Processing CVE-2024-53239... +🧪 Raw Title for CVE-2024-53239: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53239 in master table +â³ Processing CVE-2024-53173... +🧪 Raw Title for CVE-2024-53173: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53173 in master table +â³ Processing CVE-2024-53226... +🧪 Raw Title for CVE-2024-53226: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53226 in master table +â³ Processing CVE-2024-56575... +🧪 Raw Title for CVE-2024-56575: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56575 in master table +â³ Processing CVE-2024-56581... +🧪 Raw Title for CVE-2024-56581: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56581 in master table +â³ Processing CVE-2024-56595... +🧪 Raw Title for CVE-2024-56595: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56595 in master table +â³ Processing CVE-2024-56587... +🧪 Raw Title for CVE-2024-56587: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56587 in master table +â³ Processing CVE-2024-56596... +🧪 Raw Title for CVE-2024-56596: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56596 in master table +â³ Processing CVE-2024-56614... +🧪 Raw Title for CVE-2024-56614: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56614 in master table +â³ Processing CVE-2024-56605... +🧪 Raw Title for CVE-2024-56605: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56605 in master table +â³ Processing CVE-2024-56615... +🧪 Raw Title for CVE-2024-56615: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56615 in master table +â³ Processing CVE-2024-56603... +🧪 Raw Title for CVE-2024-56603: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56603 in master table +â³ Processing CVE-2024-56623... +🧪 Raw Title for CVE-2024-56623: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56623 in master table +â³ Processing CVE-2024-56643... +🧪 Raw Title for CVE-2024-56643: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56643 in master table +â³ Processing CVE-2024-56650... +🧪 Raw Title for CVE-2024-56650: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56650 in master table +â³ Processing CVE-2024-56648... +🧪 Raw Title for CVE-2024-56648: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56648 in master table +â³ Processing CVE-2024-56629... +🧪 Raw Title for CVE-2024-56629: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56629 in master table +â³ Processing CVE-2024-56670... +🧪 Raw Title for CVE-2024-56670: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56670 in master table +â³ Processing CVE-2024-56694... +🧪 Raw Title for CVE-2024-56694: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56694 in master table +â³ Processing CVE-2024-56688... +🧪 Raw Title for CVE-2024-56688: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56688 in master table +â³ Processing CVE-2024-56708... +🧪 Raw Title for CVE-2024-56708: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56708 in master table +â³ Processing CVE-2024-56747... +🧪 Raw Title for CVE-2024-56747: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56747 in master table +â³ Processing CVE-2024-56745... +🧪 Raw Title for CVE-2024-56745: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56745 in master table +â³ Processing CVE-2024-56756... +🧪 Raw Title for CVE-2024-56756: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56756 in master table +â³ Processing CVE-2024-56770... +🧪 Raw Title for CVE-2024-56770: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56770 in master table +â³ Processing CVE-2024-56781... +🧪 Raw Title for CVE-2024-56781: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56781 in master table +â³ Processing CVE-2024-56787... +🧪 Raw Title for CVE-2024-56787: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56787 in master table +â³ Processing CVE-2024-57850... +🧪 Raw Title for CVE-2024-57850: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57850 in master table +â³ Processing CVE-2024-57902... +🧪 Raw Title for CVE-2024-57902: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57902 in master table +â³ Processing CVE-2024-50302... +🧪 Raw Title for CVE-2024-50302: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-50302 in master table +â³ Processing CVE-2025-27516... +🧪 Raw Title for CVE-2025-27516: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27516 in master table +â³ Processing CVE-2025-26600... +🧪 Raw Title for CVE-2025-26600: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26600 in master table +â³ Processing CVE-2025-26597... +🧪 Raw Title for CVE-2025-26597: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26597 in master table +â³ Processing CVE-2025-1744... +🧪 Raw Title for CVE-2025-1744: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1744 in master table +â³ Processing CVE-2025-27423... +🧪 Raw Title for CVE-2025-27423: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27423 in master table +â³ Processing CVE-2025-26599... +🧪 Raw Title for CVE-2025-26599: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26599 in master table +â³ Processing CVE-2025-26601... +🧪 Raw Title for CVE-2025-26601: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26601 in master table +â³ Processing CVE-2024-43802... +🧪 Raw Title for CVE-2024-43802: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-43802 in master table +â³ Processing CVE-2024-45337... +🧪 Raw Title for CVE-2024-45337: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-45337 in master table +â³ Processing CVE-2024-36621... +🧪 Raw Title for CVE-2024-36621: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-36621 in master table +â³ Processing CVE-2024-36623... +🧪 Raw Title for CVE-2024-36623: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-36623 in master table +â³ Processing CVE-2023-6121... +🧪 Raw Title for CVE-2023-6121: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-6121 in master table +â³ Processing CVE-2023-6817... +🧪 Raw Title for CVE-2023-6817: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-6817 in master table +â³ Processing CVE-2023-2455... +🧪 Raw Title for CVE-2023-2455: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-2455 in master table +â³ Processing CVE-2025-0665... +🧪 Raw Title for CVE-2025-0665: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-0665 in master table +â³ Processing CVE-2025-0167... +🧪 Raw Title for CVE-2025-0167: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-0167 in master table +â³ Processing CVE-2024-11053... +🧪 Raw Title for CVE-2024-11053: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-11053 in master table +â³ Processing CVE-2025-0633... +🧪 Raw Title for CVE-2025-0633: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-0633 in master table +â³ Processing CVE-2023-48795... +🧪 Raw Title for CVE-2023-48795: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-48795 in master table +â³ Processing CVE-2024-6874... +🧪 Raw Title for CVE-2024-6874: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-6874 in master table +â³ Processing CVE-2024-47141... +🧪 Raw Title for CVE-2024-47141: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-47141 in master table +â³ Processing CVE-2024-48875... +🧪 Raw Title for CVE-2024-48875: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-48875 in master table +â³ Processing CVE-2024-54680... +🧪 Raw Title for CVE-2024-54680: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-54680 in master table +â³ Processing CVE-2024-56582... +🧪 Raw Title for CVE-2024-56582: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56582 in master table +â³ Processing CVE-2024-56613... +🧪 Raw Title for CVE-2024-56613: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56613 in master table +â³ Processing CVE-2024-56611... +🧪 Raw Title for CVE-2024-56611: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56611 in master table +â³ Processing CVE-2024-56617... +🧪 Raw Title for CVE-2024-56617: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56617 in master table +â³ Processing CVE-2024-56649... +🧪 Raw Title for CVE-2024-56649: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56649 in master table +â³ Processing CVE-2024-56653... +🧪 Raw Title for CVE-2024-56653: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56653 in master table +â³ Processing CVE-2024-56654... +🧪 Raw Title for CVE-2024-56654: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56654 in master table +â³ Processing CVE-2024-56655... +🧪 Raw Title for CVE-2024-56655: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56655 in master table +â³ Processing CVE-2024-56663... +🧪 Raw Title for CVE-2024-56663: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56663 in master table +â³ Processing CVE-2024-56667... +🧪 Raw Title for CVE-2024-56667: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56667 in master table +â³ Processing CVE-2024-56703... +🧪 Raw Title for CVE-2024-56703: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56703 in master table +â³ Processing CVE-2024-56718... +🧪 Raw Title for CVE-2024-56718: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56718 in master table +â³ Processing CVE-2024-56719... +🧪 Raw Title for CVE-2024-56719: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56719 in master table +â³ Processing CVE-2024-56767... +🧪 Raw Title for CVE-2024-56767: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56767 in master table +â³ Processing CVE-2024-56769... +🧪 Raw Title for CVE-2024-56769: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56769 in master table +â³ Processing CVE-2024-57801... +🧪 Raw Title for CVE-2024-57801: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57801 in master table +â³ Processing CVE-2024-57882... +🧪 Raw Title for CVE-2024-57882: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57882 in master table +â³ Processing CVE-2024-57887... +🧪 Raw Title for CVE-2024-57887: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57887 in master table +â³ Processing CVE-2024-57908... +🧪 Raw Title for CVE-2024-57908: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57908 in master table +â³ Processing CVE-2024-57922... +🧪 Raw Title for CVE-2024-57922: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57922 in master table +â³ Processing CVE-2024-57910... +🧪 Raw Title for CVE-2024-57910: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57910 in master table +â³ Processing CVE-2024-57916... +🧪 Raw Title for CVE-2024-57916: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57916 in master table +â³ Processing CVE-2024-57925... +🧪 Raw Title for CVE-2024-57925: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57925 in master table +â³ Processing CVE-2024-57933... +🧪 Raw Title for CVE-2024-57933: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57933 in master table +â³ Processing CVE-2024-57926... +🧪 Raw Title for CVE-2024-57926: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57926 in master table +â³ Processing CVE-2024-57939... +🧪 Raw Title for CVE-2024-57939: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57939 in master table +â³ Processing CVE-2024-57973... +🧪 Raw Title for CVE-2024-57973: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57973 in master table +â³ Processing CVE-2024-57981... +🧪 Raw Title for CVE-2024-57981: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57981 in master table +â³ Processing CVE-2024-57996... +🧪 Raw Title for CVE-2024-57996: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57996 in master table +â³ Processing CVE-2024-58007... +🧪 Raw Title for CVE-2024-58007: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-58007 in master table +â³ Processing CVE-2024-58017... +🧪 Raw Title for CVE-2024-58017: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-58017 in master table +â³ Processing CVE-2024-58011... +🧪 Raw Title for CVE-2024-58011: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-58011 in master table +â³ Processing CVE-2025-21640... +🧪 Raw Title for CVE-2025-21640: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21640 in master table +â³ Processing CVE-2025-21642... +🧪 Raw Title for CVE-2025-21642: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21642 in master table +â³ Processing CVE-2025-21652... +🧪 Raw Title for CVE-2025-21652: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21652 in master table +â³ Processing CVE-2025-21667... +🧪 Raw Title for CVE-2025-21667: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21667 in master table +â³ Processing CVE-2025-21658... +🧪 Raw Title for CVE-2025-21658: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21658 in master table +â³ Processing CVE-2025-21669... +🧪 Raw Title for CVE-2025-21669: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21669 in master table +â³ Processing CVE-2025-21670... +🧪 Raw Title for CVE-2025-21670: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21670 in master table +â³ Processing CVE-2025-21674... +🧪 Raw Title for CVE-2025-21674: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21674 in master table +â³ Processing CVE-2025-21675... +🧪 Raw Title for CVE-2025-21675: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21675 in master table +â³ Processing CVE-2025-21681... +🧪 Raw Title for CVE-2025-21681: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21681 in master table +â³ Processing CVE-2025-21683... +🧪 Raw Title for CVE-2025-21683: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21683 in master table +â³ Processing CVE-2025-21692... +🧪 Raw Title for CVE-2025-21692: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21692 in master table +â³ Processing CVE-2025-21697... +🧪 Raw Title for CVE-2025-21697: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21697 in master table +â³ Processing CVE-2025-21694... +🧪 Raw Title for CVE-2025-21694: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21694 in master table +â³ Processing CVE-2025-21707... +🧪 Raw Title for CVE-2025-21707: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21707 in master table +â³ Processing CVE-2025-21711... +🧪 Raw Title for CVE-2025-21711: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21711 in master table +â³ Processing CVE-2025-21743... +🧪 Raw Title for CVE-2025-21743: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21743 in master table +â³ Processing CVE-2025-21748... +🧪 Raw Title for CVE-2025-21748: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21748 in master table +â³ Processing CVE-2025-21749... +🧪 Raw Title for CVE-2025-21749: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21749 in master table +â³ Processing CVE-2025-21820... +🧪 Raw Title for CVE-2025-21820: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21820 in master table +â³ Processing CVE-2025-0426... +🧪 Raw Title for CVE-2025-0426: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-0426 in master table +â³ Processing CVE-2020-13435... +🧪 Raw Title for CVE-2020-13435: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2020-13435 in master table +â³ Processing CVE-2024-56171... +🧪 Raw Title for CVE-2024-56171: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56171 in master table +â³ Processing CVE-2025-24928... +🧪 Raw Title for CVE-2025-24928: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-24928 in master table +â³ Processing CVE-2025-27113... +🧪 Raw Title for CVE-2025-27113: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27113 in master table +â³ Processing CVE-2024-13176... +🧪 Raw Title for CVE-2024-13176: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-13176 in master table +â³ Processing CVE-2024-28757... +🧪 Raw Title for CVE-2024-28757: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-28757 in master table +â³ Processing CVE-2023-45803... +🧪 Raw Title for CVE-2023-45803: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-45803 in master table +â³ Processing CVE-2024-28180... +🧪 Raw Title for CVE-2024-28180: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-28180 in master table +â³ Processing CVE-2024-3219... +🧪 Raw Title for CVE-2024-3219: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-3219 in master table +â³ Processing CVE-2024-4032... +🧪 Raw Title for CVE-2024-4032: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-4032 in master table +â³ Processing CVE-2024-45490... +🧪 Raw Title for CVE-2024-45490: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-45490 in master table +â³ Processing CVE-2024-50602... +🧪 Raw Title for CVE-2024-50602: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-50602 in master table +â³ Processing CVE-2024-45492... +🧪 Raw Title for CVE-2024-45492: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-45492 in master table +â³ Processing CVE-2025-0938... +🧪 Raw Title for CVE-2025-0938: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-0938 in master table +â³ Processing CVE-2025-1215... +🧪 Raw Title for CVE-2025-1215: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1215 in master table +â³ Processing CVE-2025-26603... +🧪 Raw Title for CVE-2025-26603: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26603 in master table +â³ Processing CVE-2019-25219... +🧪 Raw Title for CVE-2019-25219: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2019-25219 in master table +â³ Processing CVE-2023-52160... +🧪 Raw Title for CVE-2023-52160: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-52160 in master table +â³ Processing CVE-2024-24826... +🧪 Raw Title for CVE-2024-24826: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-24826 in master table +â³ Processing CVE-2024-25112... +🧪 Raw Title for CVE-2024-25112: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-25112 in master table +â³ Processing CVE-2016-10087... +🧪 Raw Title for CVE-2016-10087: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2016-10087 in master table +â³ Processing CVE-2016-9840... +🧪 Raw Title for CVE-2016-9840: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2016-9840 in master table +â³ Processing CVE-2016-9841... +🧪 Raw Title for CVE-2016-9841: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2016-9841 in master table +â³ Processing CVE-2016-9842... +🧪 Raw Title for CVE-2016-9842: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2016-9842 in master table +â³ Processing CVE-2016-9843... +🧪 Raw Title for CVE-2016-9843: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2016-9843 in master table +â³ Processing CVE-2023-6992... +🧪 Raw Title for CVE-2023-6992: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-6992 in master table +â³ Processing CVE-2023-25564... +🧪 Raw Title for CVE-2023-25564: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-25564 in master table +â³ Processing CVE-2023-25567... +🧪 Raw Title for CVE-2023-25567: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-25567 in master table +â³ Processing CVE-2023-25566... +🧪 Raw Title for CVE-2023-25566: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-25566 in master table +â³ Processing CVE-2004-2779... +🧪 Raw Title for CVE-2004-2779: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2004-2779 in master table +â³ Processing CVE-2024-36039... +🧪 Raw Title for CVE-2024-36039: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-36039 in master table +â³ Processing CVE-2024-49769... +🧪 Raw Title for CVE-2024-49769: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-49769 in master table +â³ Processing CVE-2024-34403... +🧪 Raw Title for CVE-2024-34403: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-34403 in master table +â³ Processing CVE-2024-51744... +🧪 Raw Title for CVE-2024-51744: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-51744 in master table +â³ Processing CVE-2024-7264... +🧪 Raw Title for CVE-2024-7264: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-7264 in master table +â³ Processing CVE-2023-3978... +🧪 Raw Title for CVE-2023-3978: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-3978 in master table +â³ Processing CVE-2025-0725... +🧪 Raw Title for CVE-2025-0725: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-0725 in master table +â³ Processing CVE-2024-10846... +🧪 Raw Title for CVE-2024-10846: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-10846 in master table +â³ Processing CVE-2024-47809... +🧪 Raw Title for CVE-2024-47809: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-47809 in master table +â³ Processing CVE-2025-25204... +🧪 Raw Title for CVE-2025-25204: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-25204 in master table +â³ Processing CVE-2024-48873... +🧪 Raw Title for CVE-2024-48873: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-48873 in master table +â³ Processing CVE-2024-53179... +🧪 Raw Title for CVE-2024-53179: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53179 in master table +â³ Processing CVE-2024-54683... +🧪 Raw Title for CVE-2024-54683: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-54683 in master table +â³ Processing CVE-2024-56631... +🧪 Raw Title for CVE-2024-56631: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56631 in master table +â³ Processing CVE-2024-56635... +🧪 Raw Title for CVE-2024-56635: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56635 in master table +â³ Processing CVE-2024-56604... +🧪 Raw Title for CVE-2024-56604: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56604 in master table +â³ Processing CVE-2024-56651... +🧪 Raw Title for CVE-2024-56651: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56651 in master table +â³ Processing CVE-2024-56660... +🧪 Raw Title for CVE-2024-56660: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56660 in master table +â³ Processing CVE-2024-56665... +🧪 Raw Title for CVE-2024-56665: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56665 in master table +â³ Processing CVE-2024-56664... +🧪 Raw Title for CVE-2024-56664: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56664 in master table +â³ Processing CVE-2024-56672... +🧪 Raw Title for CVE-2024-56672: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56672 in master table +â³ Processing CVE-2024-56675... +🧪 Raw Title for CVE-2024-56675: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56675 in master table +â³ Processing CVE-2024-56717... +🧪 Raw Title for CVE-2024-56717: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56717 in master table +â³ Processing CVE-2024-56760... +🧪 Raw Title for CVE-2024-56760: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56760 in master table +â³ Processing CVE-2024-56783... +🧪 Raw Title for CVE-2024-56783: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56783 in master table +â³ Processing CVE-2024-56765... +🧪 Raw Title for CVE-2024-56765: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56765 in master table +â³ Processing CVE-2024-56766... +🧪 Raw Title for CVE-2024-56766: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56766 in master table +â³ Processing CVE-2024-56786... +🧪 Raw Title for CVE-2024-56786: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56786 in master table +â³ Processing CVE-2024-57798... +🧪 Raw Title for CVE-2024-57798: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57798 in master table +â³ Processing CVE-2024-57895... +🧪 Raw Title for CVE-2024-57895: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57895 in master table +â³ Processing CVE-2024-57906... +🧪 Raw Title for CVE-2024-57906: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57906 in master table +â³ Processing CVE-2024-57907... +🧪 Raw Title for CVE-2024-57907: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57907 in master table +â³ Processing CVE-2024-57911... +🧪 Raw Title for CVE-2024-57911: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57911 in master table +â³ Processing CVE-2024-57913... +🧪 Raw Title for CVE-2024-57913: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57913 in master table +â³ Processing CVE-2024-57940... +🧪 Raw Title for CVE-2024-57940: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57940 in master table +â³ Processing CVE-2024-57949... +🧪 Raw Title for CVE-2024-57949: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57949 in master table +â³ Processing CVE-2024-57951... +🧪 Raw Title for CVE-2024-57951: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57951 in master table +â³ Processing CVE-2024-57997... +🧪 Raw Title for CVE-2024-57997: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57997 in master table +â³ Processing CVE-2024-58005... +🧪 Raw Title for CVE-2024-58005: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-58005 in master table +â³ Processing CVE-2024-58010... +🧪 Raw Title for CVE-2024-58010: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-58010 in master table +â³ Processing CVE-2025-21636... +🧪 Raw Title for CVE-2025-21636: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21636 in master table +â³ Processing CVE-2025-21631... +🧪 Raw Title for CVE-2025-21631: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21631 in master table +â³ Processing CVE-2025-21639... +🧪 Raw Title for CVE-2025-21639: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21639 in master table +â³ Processing CVE-2025-21666... +🧪 Raw Title for CVE-2025-21666: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21666 in master table +â³ Processing CVE-2025-21665... +🧪 Raw Title for CVE-2025-21665: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21665 in master table +â³ Processing CVE-2025-21673... +🧪 Raw Title for CVE-2025-21673: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21673 in master table +â³ Processing CVE-2025-21676... +🧪 Raw Title for CVE-2025-21676: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21676 in master table +â³ Processing CVE-2025-21684... +🧪 Raw Title for CVE-2025-21684: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21684 in master table +â³ Processing CVE-2025-21689... +🧪 Raw Title for CVE-2025-21689: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21689 in master table +â³ Processing CVE-2025-21687... +🧪 Raw Title for CVE-2025-21687: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21687 in master table +â³ Processing CVE-2025-21690... +🧪 Raw Title for CVE-2025-21690: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21690 in master table +â³ Processing CVE-2025-21699... +🧪 Raw Title for CVE-2025-21699: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21699 in master table +â³ Processing CVE-2025-21735... +🧪 Raw Title for CVE-2025-21735: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21735 in master table +â³ Processing CVE-2025-21736... +🧪 Raw Title for CVE-2025-21736: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21736 in master table +â³ Processing CVE-2025-21741... +🧪 Raw Title for CVE-2025-21741: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21741 in master table +â³ Processing CVE-2025-21742... +🧪 Raw Title for CVE-2025-21742: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21742 in master table +â³ Processing CVE-2025-21744... +🧪 Raw Title for CVE-2025-21744: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21744 in master table +â³ Processing CVE-2025-21745... +🧪 Raw Title for CVE-2025-21745: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21745 in master table +â³ Processing CVE-2025-21814... +🧪 Raw Title for CVE-2025-21814: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21814 in master table +â³ Processing CVE-2025-1390... +🧪 Raw Title for CVE-2025-1390: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1390 in master table +â³ Processing CVE-2024-25062... +🧪 Raw Title for CVE-2024-25062: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-25062 in master table +â³ Processing CVE-2025-23359... +🧪 Raw Title for CVE-2025-23359: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-23359 in master table +â³ Processing CVE-2024-12797... +🧪 Raw Title for CVE-2024-12797: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-12797 in master table +â³ Processing CVE-2024-9143... +🧪 Raw Title for CVE-2024-9143: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-9143 in master table +â³ Processing CVE-2024-37891... +🧪 Raw Title for CVE-2024-37891: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-37891 in master table +â³ Processing CVE-2024-4030... +🧪 Raw Title for CVE-2024-4030: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-4030 in master table +â³ Processing CVE-2024-45491... +🧪 Raw Title for CVE-2024-45491: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-45491 in master table +â³ Processing CVE-2023-44398... +🧪 Raw Title for CVE-2023-44398: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-44398 in master table +â³ Processing CVE-2024-39695... +🧪 Raw Title for CVE-2024-39695: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-39695 in master table +â³ Processing CVE-2015-8126... +🧪 Raw Title for CVE-2015-8126: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2015-8126 in master table +â³ Processing CVE-2015-8472... +🧪 Raw Title for CVE-2015-8472: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2015-8472 in master table +â³ Processing CVE-2017-12652... +🧪 Raw Title for CVE-2017-12652: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2017-12652 in master table +â³ Processing CVE-2023-25563... +🧪 Raw Title for CVE-2023-25563: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-25563 in master table +â³ Processing CVE-2019-7317... +🧪 Raw Title for CVE-2019-7317: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2019-7317 in master table +â³ Processing CVE-2023-25565... +🧪 Raw Title for CVE-2023-25565: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-25565 in master table +â³ Processing CVE-2023-40305... +🧪 Raw Title for CVE-2023-40305: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-40305 in master table +â³ Processing CVE-2017-11550... +🧪 Raw Title for CVE-2017-11550: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2017-11550 in master table +â³ Processing CVE-2017-11551... +🧪 Raw Title for CVE-2017-11551: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2017-11551 in master table +â³ Processing CVE-2018-7263... +🧪 Raw Title for CVE-2018-7263: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2018-7263 in master table +â³ Processing CVE-2023-39976... +🧪 Raw Title for CVE-2023-39976: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-39976 in master table +â³ Processing CVE-2023-35789... +🧪 Raw Title for CVE-2023-35789: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-35789 in master table +â³ Processing CVE-2022-43357... +🧪 Raw Title for CVE-2022-43357: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-43357 in master table +â³ Processing CVE-2022-26592... +🧪 Raw Title for CVE-2022-26592: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-26592 in master table +â³ Processing CVE-2022-43358... +🧪 Raw Title for CVE-2022-43358: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-43358 in master table +â³ Processing CVE-2023-28370... +🧪 Raw Title for CVE-2023-28370: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-28370 in master table +â³ Processing CVE-2022-24761... +🧪 Raw Title for CVE-2022-24761: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-24761 in master table +â³ Processing CVE-2022-31015... +🧪 Raw Title for CVE-2022-31015: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-31015 in master table +â³ Processing CVE-2018-25032... +🧪 Raw Title for CVE-2018-25032: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2018-25032 in master table +â³ Processing CVE-2022-37434... +🧪 Raw Title for CVE-2022-37434: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-37434 in master table +â³ Processing CVE-2024-34402... +🧪 Raw Title for CVE-2024-34402: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-34402 in master table +â³ Processing CVE-2024-30161... +🧪 Raw Title for CVE-2024-30161: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-30161 in master table +â³ Processing CVE-2023-35945... +🧪 Raw Title for CVE-2023-35945: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-35945 in master table +â³ Processing CVE-2024-53899... +🧪 Raw Title for CVE-2024-53899: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53899 in master table +â³ Processing CVE-2025-27363... +🧪 Raw Title for CVE-2025-27363: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27363 in master table +â³ Processing CVE-2024-26651... +🧪 Raw Title for CVE-2024-26651: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-26651 in master table +â³ Processing CVE-2025-1550... +🧪 Raw Title for CVE-2025-1550: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1550 in master table +â³ Processing CVE-2024-33601... +🧪 Raw Title for CVE-2024-33601: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-33601 in master table +â³ Processing CVE-2024-53427... +🧪 Raw Title for CVE-2024-53427: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53427 in master table +â³ Processing CVE-2023-29933... +🧪 Raw Title for CVE-2023-29933: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-29933 in master table +â³ Processing CVE-2025-25724... +🧪 Raw Title for CVE-2025-25724: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-25724 in master table +â³ Processing CVE-2024-25580... +🧪 Raw Title for CVE-2024-25580: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-25580 in master table +â³ Processing CVE-2023-29941... +🧪 Raw Title for CVE-2023-29941: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-29941 in master table +â³ Processing CVE-2024-46901... +🧪 Raw Title for CVE-2024-46901: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-46901 in master table +â³ Processing CVE-2024-53257... +🧪 Raw Title for CVE-2024-53257: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53257 in master table +â³ Processing CVE-2023-29932... +🧪 Raw Title for CVE-2023-29932: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-29932 in master table +â³ Processing CVE-2023-34410... +🧪 Raw Title for CVE-2023-34410: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-34410 in master table +â³ Processing CVE-2023-31147... +🧪 Raw Title for CVE-2023-31147: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-31147 in master table +â³ Processing CVE-2024-53920... +🧪 Raw Title for CVE-2024-53920: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53920 in master table +â³ Processing CVE-2024-55549... +🧪 Raw Title for CVE-2024-55549: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-55549 in master table +â³ Processing CVE-2024-12243... +🧪 Raw Title for CVE-2024-12243: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-12243 in master table +â³ Processing CVE-2025-24855... +🧪 Raw Title for CVE-2025-24855: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-24855 in master table +â³ Processing CVE-2024-28863... +🧪 Raw Title for CVE-2024-28863: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-28863 in master table +â³ Processing CVE-2025-29768... +🧪 Raw Title for CVE-2025-29768: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-29768 in master table +â³ Processing CVE-2023-6683... +🧪 Raw Title for CVE-2023-6683: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-6683 in master table +â³ Processing CVE-2023-6693... +🧪 Raw Title for CVE-2023-6693: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-6693 in master table +â³ Processing CVE-2023-5088... +🧪 Raw Title for CVE-2023-5088: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-5088 in master table +â³ Processing CVE-2020-8565... +🧪 Raw Title for CVE-2020-8565: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2020-8565 in master table +â³ Processing CVE-2023-6004... +🧪 Raw Title for CVE-2023-6004: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-6004 in master table +â³ Processing CVE-2023-6918... +🧪 Raw Title for CVE-2023-6918: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-6918 in master table +â³ Processing CVE-2023-46137... +🧪 Raw Title for CVE-2023-46137: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-46137 in master table +â³ Processing CVE-2025-29806... +🧪 Raw Title for CVE-2025-29806: { + "Value": "Microsoft Edge (Chromium-based) Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Edge (Chromium-based) Remote Code Execution Vulnerability" +✅ Updated CVE-2025-29806 in master table +â³ Processing CVE-2025-24071... +🧪 Raw Title for CVE-2025-24071: { + "Value": "Microsoft Windows File Explorer Spoofing Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Windows File Explorer Spoofing Vulnerability" +✅ Updated CVE-2025-24071 in master table +🎉 Enrichment complete for 2025-Mar +[16 Apr 2025, 01:32:54 pm] ✅ enrichCVE_MSRC.js finished with exit code: 0 +[16 Apr 2025, 02:35:38 pm] 🚀 📡 MSRC sync launched in background. +🚀 Starting MSRC enrichment of CVEs... +📡 Fetching CVEs for 2025-Mar... +📋 Found 537 vulnerabilities. +â³ Processing CVE-2025-24513... +🧪 Raw Title for CVE-2025-24513: { + "Value": "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +} +âž¡ï¸ Parsed Title: "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +✅ Updated CVE-2025-24513 in master table +â³ Processing CVE-2025-24035... +🧪 Raw Title for CVE-2025-24035: { + "Value": "Windows Remote Desktop Services Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Remote Desktop Services Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24035 in master table +â³ Processing CVE-2024-9157... +🧪 Raw Title for CVE-2024-9157: { + "Value": "Synaptics: CVE-2024-9157 Synaptics Service Binaries DLL Loading Vulnerability" +} +âž¡ï¸ Parsed Title: "Synaptics: CVE-2024-9157 Synaptics Service Binaries DLL Loading Vulnerability" +✅ Updated CVE-2024-9157 in master table +â³ Processing CVE-2025-24044... +🧪 Raw Title for CVE-2025-24044: { + "Value": "Windows Win32 Kernel Subsystem Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Win32 Kernel Subsystem Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24044 in master table +â³ Processing CVE-2025-24043... +🧪 Raw Title for CVE-2025-24043: { + "Value": "WinDbg Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "WinDbg Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24043 in master table +â³ Processing CVE-2025-24057... +🧪 Raw Title for CVE-2025-24057: { + "Value": "Microsoft Office Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Office Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24057 in master table +â³ Processing CVE-2025-24070... +🧪 Raw Title for CVE-2025-24070: { + "Value": "ASP.NET Core and Visual Studio Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "ASP.NET Core and Visual Studio Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24070 in master table +â³ Processing CVE-2025-24077... +🧪 Raw Title for CVE-2025-24077: { + "Value": "Microsoft Word Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Word Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24077 in master table +â³ Processing CVE-2025-24078... +🧪 Raw Title for CVE-2025-24078: { + "Value": "Microsoft Word Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Word Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24078 in master table +â³ Processing CVE-2025-24079... +🧪 Raw Title for CVE-2025-24079: { + "Value": "Microsoft Word Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Word Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24079 in master table +â³ Processing CVE-2025-24080... +🧪 Raw Title for CVE-2025-24080: { + "Value": "Microsoft Office Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Office Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24080 in master table +â³ Processing CVE-2025-24081... +🧪 Raw Title for CVE-2025-24081: { + "Value": "Microsoft Excel Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Excel Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24081 in master table +â³ Processing CVE-2025-24082... +🧪 Raw Title for CVE-2025-24082: { + "Value": "Microsoft Excel Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Excel Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24082 in master table +â³ Processing CVE-2025-24083... +🧪 Raw Title for CVE-2025-24083: { + "Value": "Microsoft Office Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Office Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24083 in master table +â³ Processing CVE-2025-24986... +🧪 Raw Title for CVE-2025-24986: { + "Value": "Azure Promptflow Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Azure Promptflow Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24986 in master table +â³ Processing CVE-2025-24987... +🧪 Raw Title for CVE-2025-24987: { + "Value": "Windows USB Video Class System Driver Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows USB Video Class System Driver Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24987 in master table +â³ Processing CVE-2025-24988... +🧪 Raw Title for CVE-2025-24988: { + "Value": "Windows USB Video Class System Driver Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows USB Video Class System Driver Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24988 in master table +â³ Processing CVE-2025-21180... +🧪 Raw Title for CVE-2025-21180: { + "Value": "Windows exFAT File System Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows exFAT File System Remote Code Execution Vulnerability" +✅ Updated CVE-2025-21180 in master table +â³ Processing CVE-2025-24995... +🧪 Raw Title for CVE-2025-24995: { + "Value": "Kernel Streaming WOW Thunk Service Driver Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Kernel Streaming WOW Thunk Service Driver Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24995 in master table +â³ Processing CVE-2025-24996... +🧪 Raw Title for CVE-2025-24996: { + "Value": "NTLM Hash Disclosure Spoofing Vulnerability" +} +âž¡ï¸ Parsed Title: "NTLM Hash Disclosure Spoofing Vulnerability" +✅ Updated CVE-2025-24996 in master table +â³ Processing CVE-2025-24997... +🧪 Raw Title for CVE-2025-24997: { + "Value": "DirectX Graphics Kernel File Denial of Service Vulnerability" +} +âž¡ï¸ Parsed Title: "DirectX Graphics Kernel File Denial of Service Vulnerability" +✅ Updated CVE-2025-24997 in master table +â³ Processing CVE-2025-24998... +🧪 Raw Title for CVE-2025-24998: { + "Value": "Visual Studio Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Visual Studio Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24998 in master table +â³ Processing CVE-2025-25003... +🧪 Raw Title for CVE-2025-25003: { + "Value": "Visual Studio Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Visual Studio Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-25003 in master table +â³ Processing CVE-2025-25008... +🧪 Raw Title for CVE-2025-25008: { + "Value": "Windows Server Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Server Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-25008 in master table +â³ Processing CVE-2025-1919... +🧪 Raw Title for CVE-2025-1919: { + "Value": "Chromium: CVE-2025-1919 Out of bounds read in Media" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1919 Out of bounds read in Media" +✅ Updated CVE-2025-1919 in master table +â³ Processing CVE-2025-1916... +🧪 Raw Title for CVE-2025-1916: { + "Value": "Chromium: CVE-2025-1916 Use after free in Profiles" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1916 Use after free in Profiles" +✅ Updated CVE-2025-1916 in master table +â³ Processing CVE-2025-1918... +🧪 Raw Title for CVE-2025-1918: { + "Value": "Chromium: CVE-2025-1918 Out of bounds read in PDFium" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1918 Out of bounds read in PDFium" +✅ Updated CVE-2025-1918 in master table +â³ Processing CVE-2025-1917... +🧪 Raw Title for CVE-2025-1917: { + "Value": "Chromium: CVE-2025-1917 Inappropriate Implementation in Browser UI" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1917 Inappropriate Implementation in Browser UI" +✅ Updated CVE-2025-1917 in master table +â³ Processing CVE-2025-1921... +🧪 Raw Title for CVE-2025-1921: { + "Value": "Chromium: CVE-2025-1921 Inappropriate Implementation in Media Stream" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1921 Inappropriate Implementation in Media Stream" +✅ Updated CVE-2025-1921 in master table +â³ Processing CVE-2025-1915... +🧪 Raw Title for CVE-2025-1915: { + "Value": "Chromium: CVE-2025-1915 Improper Limitation of a Pathname to a Restricted Directory in DevTools" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1915 Improper Limitation of a Pathname to a Restricted Directory in DevTools" +✅ Updated CVE-2025-1915 in master table +â³ Processing CVE-2025-1923... +🧪 Raw Title for CVE-2025-1923: { + "Value": "Chromium: CVE-2025-1923 Inappropriate Implementation in Permission Prompts" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1923 Inappropriate Implementation in Permission Prompts" +✅ Updated CVE-2025-1923 in master table +â³ Processing CVE-2025-1922... +🧪 Raw Title for CVE-2025-1922: { + "Value": "Chromium: CVE-2025-1922 Inappropriate Implementation in Selection" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1922 Inappropriate Implementation in Selection" +✅ Updated CVE-2025-1922 in master table +â³ Processing CVE-2025-1914... +🧪 Raw Title for CVE-2025-1914: { + "Value": "Chromium: CVE-2025-1914 Out of bounds read in V8" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1914 Out of bounds read in V8" +✅ Updated CVE-2025-1914 in master table +â³ Processing CVE-2025-2135... +🧪 Raw Title for CVE-2025-2135: { + "Value": "Chromium: CVE-2025-2135 Type Confusion in V8" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-2135 Type Confusion in V8" +✅ Updated CVE-2025-2135 in master table +â³ Processing CVE-2025-1920... +🧪 Raw Title for CVE-2025-1920: { + "Value": "Chromium: CVE-2025-1920 Type Confusion in V8" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1920 Type Confusion in V8" +✅ Updated CVE-2025-1920 in master table +â³ Processing CVE-2025-29807... +🧪 Raw Title for CVE-2025-29807: { + "Value": "Microsoft Dataverse Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Dataverse Remote Code Execution Vulnerability" +✅ Updated CVE-2025-29807 in master table +â³ Processing CVE-2025-29814... +🧪 Raw Title for CVE-2025-29814: { + "Value": "Microsoft Partner Center Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Partner Center Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-29814 in master table +â³ Processing CVE-2025-2476... +🧪 Raw Title for CVE-2025-2476: { + "Value": "Chromium: CVE-2025-2476 Use after free in Lens" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-2476 Use after free in Lens" +✅ Updated CVE-2025-2476 in master table +â³ Processing CVE-2025-26683... +🧪 Raw Title for CVE-2025-26683: { + "Value": "Azure Playwright Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Azure Playwright Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-26683 in master table +â³ Processing CVE-2025-21384... +🧪 Raw Title for CVE-2025-21384: { + "Value": "Azure Health Bot Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Azure Health Bot Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-21384 in master table +â³ Processing CVE-2025-21247... +🧪 Raw Title for CVE-2025-21247: { + "Value": "MapUrlToZone Security Feature Bypass Vulnerability" +} +âž¡ï¸ Parsed Title: "MapUrlToZone Security Feature Bypass Vulnerability" +✅ Updated CVE-2025-21247 in master table +â³ Processing CVE-2025-21199... +🧪 Raw Title for CVE-2025-21199: { + "Value": "Azure Agent Installer for Backup and Site Recovery Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Azure Agent Installer for Backup and Site Recovery Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-21199 in master table +â³ Processing CVE-2025-24045... +🧪 Raw Title for CVE-2025-24045: { + "Value": "Windows Remote Desktop Services Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Remote Desktop Services Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24045 in master table +â³ Processing CVE-2025-24046... +🧪 Raw Title for CVE-2025-24046: { + "Value": "Kernel Streaming Service Driver Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Kernel Streaming Service Driver Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24046 in master table +â³ Processing CVE-2025-24048... +🧪 Raw Title for CVE-2025-24048: { + "Value": "Windows Hyper-V Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Hyper-V Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24048 in master table +â³ Processing CVE-2025-24050... +🧪 Raw Title for CVE-2025-24050: { + "Value": "Windows Hyper-V Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Hyper-V Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24050 in master table +â³ Processing CVE-2025-24051... +🧪 Raw Title for CVE-2025-24051: { + "Value": "Windows Routing and Remote Access Service (RRAS) Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Routing and Remote Access Service (RRAS) Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24051 in master table +â³ Processing CVE-2025-24054... +🧪 Raw Title for CVE-2025-24054: { + "Value": "NTLM Hash Disclosure Spoofing Vulnerability" +} +âž¡ï¸ Parsed Title: "NTLM Hash Disclosure Spoofing Vulnerability" +✅ Updated CVE-2025-24054 in master table +â³ Processing CVE-2025-24055... +🧪 Raw Title for CVE-2025-24055: { + "Value": "Windows USB Video Class System Driver Information Disclosure Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows USB Video Class System Driver Information Disclosure Vulnerability" +✅ Updated CVE-2025-24055 in master table +â³ Processing CVE-2025-24056... +🧪 Raw Title for CVE-2025-24056: { + "Value": "Windows Telephony Service Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Telephony Service Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24056 in master table +â³ Processing CVE-2025-24059... +🧪 Raw Title for CVE-2025-24059: { + "Value": "Windows Common Log File System Driver Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Common Log File System Driver Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24059 in master table +â³ Processing CVE-2025-24061... +🧪 Raw Title for CVE-2025-24061: { + "Value": "Windows Mark of the Web Security Feature Bypass Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Mark of the Web Security Feature Bypass Vulnerability" +✅ Updated CVE-2025-24061 in master table +â³ Processing CVE-2025-24064... +🧪 Raw Title for CVE-2025-24064: { + "Value": "Windows Domain Name Service Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Domain Name Service Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24064 in master table +â³ Processing CVE-2025-24066... +🧪 Raw Title for CVE-2025-24066: { + "Value": "Kernel Streaming Service Driver Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Kernel Streaming Service Driver Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24066 in master table +â³ Processing CVE-2025-24067... +🧪 Raw Title for CVE-2025-24067: { + "Value": "Kernel Streaming Service Driver Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Kernel Streaming Service Driver Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24067 in master table +â³ Processing CVE-2025-24072... +🧪 Raw Title for CVE-2025-24072: { + "Value": "Microsoft Local Security Authority (LSA) Server Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Local Security Authority (LSA) Server Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24072 in master table +â³ Processing CVE-2025-24075... +🧪 Raw Title for CVE-2025-24075: { + "Value": "Microsoft Excel Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Excel Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24075 in master table +â³ Processing CVE-2025-24076... +🧪 Raw Title for CVE-2025-24076: { + "Value": "Microsoft Windows Cross Device Service Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Windows Cross Device Service Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24076 in master table +â³ Processing CVE-2025-24084... +🧪 Raw Title for CVE-2025-24084: { + "Value": "Windows Subsystem for Linux (WSL2) Kernel Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Subsystem for Linux (WSL2) Kernel Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24084 in master table +â³ Processing CVE-2025-24983... +🧪 Raw Title for CVE-2025-24983: { + "Value": "Windows Win32 Kernel Subsystem Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Win32 Kernel Subsystem Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24983 in master table +â³ Processing CVE-2025-24984... +🧪 Raw Title for CVE-2025-24984: { + "Value": "Windows NTFS Information Disclosure Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows NTFS Information Disclosure Vulnerability" +✅ Updated CVE-2025-24984 in master table +â³ Processing CVE-2025-24985... +🧪 Raw Title for CVE-2025-24985: { + "Value": "Windows Fast FAT File System Driver Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Fast FAT File System Driver Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24985 in master table +â³ Processing CVE-2025-24991... +🧪 Raw Title for CVE-2025-24991: { + "Value": "Windows NTFS Information Disclosure Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows NTFS Information Disclosure Vulnerability" +✅ Updated CVE-2025-24991 in master table +â³ Processing CVE-2025-24992... +🧪 Raw Title for CVE-2025-24992: { + "Value": "Windows NTFS Information Disclosure Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows NTFS Information Disclosure Vulnerability" +✅ Updated CVE-2025-24992 in master table +â³ Processing CVE-2025-24993... +🧪 Raw Title for CVE-2025-24993: { + "Value": "Windows NTFS Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows NTFS Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24993 in master table +â³ Processing CVE-2025-24994... +🧪 Raw Title for CVE-2025-24994: { + "Value": "Microsoft Windows Cross Device Service Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Windows Cross Device Service Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24994 in master table +â³ Processing CVE-2025-24049... +🧪 Raw Title for CVE-2025-24049: { + "Value": "Azure Command Line Integration (CLI) Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Azure Command Line Integration (CLI) Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24049 in master table +â³ Processing CVE-2025-26627... +🧪 Raw Title for CVE-2025-26627: { + "Value": "Azure Arc Installer Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Azure Arc Installer Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-26627 in master table +â³ Processing CVE-2025-26629... +🧪 Raw Title for CVE-2025-26629: { + "Value": "Microsoft Office Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Office Remote Code Execution Vulnerability" +✅ Updated CVE-2025-26629 in master table +â³ Processing CVE-2025-26630... +🧪 Raw Title for CVE-2025-26630: { + "Value": "Microsoft Access Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Access Remote Code Execution Vulnerability" +✅ Updated CVE-2025-26630 in master table +â³ Processing CVE-2025-26631... +🧪 Raw Title for CVE-2025-26631: { + "Value": "Visual Studio Code Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Visual Studio Code Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-26631 in master table +â³ Processing CVE-2025-26633... +🧪 Raw Title for CVE-2025-26633: { + "Value": "Microsoft Management Console Security Feature Bypass Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Management Console Security Feature Bypass Vulnerability" +✅ Updated CVE-2025-26633 in master table +â³ Processing CVE-2025-26643... +🧪 Raw Title for CVE-2025-26643: { + "Value": "Microsoft Edge (Chromium-based) Spoofing Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Edge (Chromium-based) Spoofing Vulnerability" +✅ Updated CVE-2025-26643 in master table +â³ Processing CVE-2025-26645... +🧪 Raw Title for CVE-2025-26645: { + "Value": "Remote Desktop Client Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Remote Desktop Client Remote Code Execution Vulnerability" +✅ Updated CVE-2025-26645 in master table +â³ Processing CVE-2025-2137... +🧪 Raw Title for CVE-2025-2137: { + "Value": "Chromium: CVE-2025-2137 Out of bounds read in V8" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-2137 Out of bounds read in V8" +✅ Updated CVE-2025-2137 in master table +â³ Processing CVE-2025-2136... +🧪 Raw Title for CVE-2025-2136: { + "Value": "Chromium: CVE-2025-2136 Use after free in Inspector" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-2136 Use after free in Inspector" +✅ Updated CVE-2025-2136 in master table +â³ Processing CVE-2025-24201... +🧪 Raw Title for CVE-2025-24201: { + "Value": "Chromium: CVE-2025-24201 Out of bounds write in GPU on Mac" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-24201 Out of bounds write in GPU on Mac" +✅ Updated CVE-2025-24201 in master table +â³ Processing CVE-2025-1097... +🧪 Raw Title for CVE-2025-1097: { + "Value": "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +} +âž¡ï¸ Parsed Title: "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +✅ Updated CVE-2025-1097 in master table +â³ Processing CVE-2025-1098... +🧪 Raw Title for CVE-2025-1098: { + "Value": "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +} +âž¡ï¸ Parsed Title: "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +✅ Updated CVE-2025-1098 in master table +â³ Processing CVE-2025-1974... +🧪 Raw Title for CVE-2025-1974: { + "Value": "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +} +âž¡ï¸ Parsed Title: "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +✅ Updated CVE-2025-1974 in master table +â³ Processing CVE-2025-24514... +🧪 Raw Title for CVE-2025-24514: { + "Value": "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +} +âž¡ï¸ Parsed Title: "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +✅ Updated CVE-2025-24514 in master table +â³ Processing CVE-2025-24053... +🧪 Raw Title for CVE-2025-24053: { + "Value": "Microsoft Dataverse Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Dataverse Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24053 in master table +â³ Processing CVE-2025-29795... +🧪 Raw Title for CVE-2025-29795: { + "Value": "Microsoft Edge (Chromium-based) Update Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Edge (Chromium-based) Update Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-29795 in master table +â³ Processing CVE-2025-2783... +🧪 Raw Title for CVE-2025-2783: { + "Value": "Chromium: CVE-2025-2783 Incorrect handle provided in unspecified circumstances in Mojo on Windows" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-2783 Incorrect handle provided in unspecified circumstances in Mojo on Windows" +✅ Updated CVE-2025-2783 in master table +â³ Processing CVE-2021-3672... +🧪 Raw Title for CVE-2021-3672: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2021-3672 in master table +â³ Processing CVE-2021-23336... +🧪 Raw Title for CVE-2021-23336: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2021-23336 in master table +â³ Processing CVE-2023-40548... +🧪 Raw Title for CVE-2023-40548: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-40548 in master table +â³ Processing CVE-2023-40550... +🧪 Raw Title for CVE-2023-40550: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-40550 in master table +â³ Processing CVE-2020-27840... +🧪 Raw Title for CVE-2020-27840: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2020-27840 in master table +â³ Processing CVE-2024-5288... +🧪 Raw Title for CVE-2024-5288: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-5288 in master table +â³ Processing CVE-2024-6104... +🧪 Raw Title for CVE-2024-6104: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-6104 in master table +â³ Processing CVE-2023-45288... +🧪 Raw Title for CVE-2023-45288: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-45288 in master table +â³ Processing CVE-2019-20907... +🧪 Raw Title for CVE-2019-20907: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2019-20907 in master table +â³ Processing CVE-2019-9674... +🧪 Raw Title for CVE-2019-9674: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2019-9674 in master table +â³ Processing CVE-2012-2677... +🧪 Raw Title for CVE-2012-2677: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2012-2677 in master table +â³ Processing CVE-2012-6708... +🧪 Raw Title for CVE-2012-6708: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2012-6708 in master table +â³ Processing CVE-2024-52338... +🧪 Raw Title for CVE-2024-52338: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-52338 in master table +â³ Processing CVE-2024-34062... +🧪 Raw Title for CVE-2024-34062: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-34062 in master table +â³ Processing CVE-2024-32020... +🧪 Raw Title for CVE-2024-32020: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-32020 in master table +â³ Processing CVE-2024-7383... +🧪 Raw Title for CVE-2024-7383: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-7383 in master table +â³ Processing CVE-2022-40898... +🧪 Raw Title for CVE-2022-40898: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-40898 in master table +â³ Processing CVE-2019-14584... +🧪 Raw Title for CVE-2019-14584: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2019-14584 in master table +â³ Processing CVE-2022-32746... +🧪 Raw Title for CVE-2022-32746: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-32746 in master table +â³ Processing CVE-2021-20277... +🧪 Raw Title for CVE-2021-20277: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2021-20277 in master table +â³ Processing CVE-2019-3816... +🧪 Raw Title for CVE-2019-3816: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2019-3816 in master table +â³ Processing CVE-2025-26466... +🧪 Raw Title for CVE-2025-26466: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26466 in master table +â³ Processing CVE-2024-50608... +🧪 Raw Title for CVE-2024-50608: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-50608 in master table +â³ Processing CVE-2025-26618... +🧪 Raw Title for CVE-2025-26618: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26618 in master table +â³ Processing CVE-2024-1454... +🧪 Raw Title for CVE-2024-1454: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-1454 in master table +â³ Processing CVE-2024-9681... +🧪 Raw Title for CVE-2024-9681: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-9681 in master table +â³ Processing CVE-2025-27144... +🧪 Raw Title for CVE-2025-27144: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27144 in master table +â³ Processing CVE-2024-50609... +🧪 Raw Title for CVE-2024-50609: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-50609 in master table +â³ Processing CVE-2023-52917... +🧪 Raw Title for CVE-2023-52917: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-52917 in master table +â³ Processing CVE-2021-36373... +🧪 Raw Title for CVE-2021-36373: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2021-36373 in master table +â³ Processing CVE-2021-36374... +🧪 Raw Title for CVE-2021-36374: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2021-36374 in master table +â³ Processing CVE-2023-40660... +🧪 Raw Title for CVE-2023-40660: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-40660 in master table +â³ Processing CVE-2024-50181... +🧪 Raw Title for CVE-2024-50181: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-50181 in master table +â³ Processing CVE-2024-56741... +🧪 Raw Title for CVE-2024-56741: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56741 in master table +â³ Processing CVE-2024-39908... +🧪 Raw Title for CVE-2024-39908: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-39908 in master table +â³ Processing CVE-2025-0840... +🧪 Raw Title for CVE-2025-0840: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-0840 in master table +â³ Processing CVE-2024-26973... +🧪 Raw Title for CVE-2024-26973: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-26973 in master table +â³ Processing CVE-2024-53150... +🧪 Raw Title for CVE-2024-53150: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53150 in master table +â³ Processing CVE-2024-53151... +🧪 Raw Title for CVE-2024-53151: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53151 in master table +â³ Processing CVE-2024-53215... +🧪 Raw Title for CVE-2024-53215: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53215 in master table +â³ Processing CVE-2024-53180... +🧪 Raw Title for CVE-2024-53180: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53180 in master table +â³ Processing CVE-2024-56568... +🧪 Raw Title for CVE-2024-56568: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56568 in master table +â³ Processing CVE-2024-56567... +🧪 Raw Title for CVE-2024-56567: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56567 in master table +â³ Processing CVE-2024-56598... +🧪 Raw Title for CVE-2024-56598: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56598 in master table +â³ Processing CVE-2024-56634... +🧪 Raw Title for CVE-2024-56634: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56634 in master table +â³ Processing CVE-2024-56640... +🧪 Raw Title for CVE-2024-56640: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56640 in master table +â³ Processing CVE-2024-56720... +🧪 Raw Title for CVE-2024-56720: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56720 in master table +â³ Processing CVE-2024-56754... +🧪 Raw Title for CVE-2024-56754: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56754 in master table +â³ Processing CVE-2024-57802... +🧪 Raw Title for CVE-2024-57802: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57802 in master table +â³ Processing CVE-2024-57807... +🧪 Raw Title for CVE-2024-57807: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57807 in master table +â³ Processing CVE-2024-57900... +🧪 Raw Title for CVE-2024-57900: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57900 in master table +â³ Processing CVE-2024-57938... +🧪 Raw Title for CVE-2024-57938: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57938 in master table +â³ Processing CVE-2024-45828... +🧪 Raw Title for CVE-2024-45828: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-45828 in master table +â³ Processing CVE-2024-47143... +🧪 Raw Title for CVE-2024-47143: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-47143 in master table +â³ Processing CVE-2024-53161... +🧪 Raw Title for CVE-2024-53161: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53161 in master table +â³ Processing CVE-2024-53155... +🧪 Raw Title for CVE-2024-53155: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53155 in master table +â³ Processing CVE-2024-55916... +🧪 Raw Title for CVE-2024-55916: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-55916 in master table +â³ Processing CVE-2024-56548... +🧪 Raw Title for CVE-2024-56548: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56548 in master table +â³ Processing CVE-2024-56600... +🧪 Raw Title for CVE-2024-56600: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56600 in master table +â³ Processing CVE-2024-56626... +🧪 Raw Title for CVE-2024-56626: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56626 in master table +â³ Processing CVE-2024-56627... +🧪 Raw Title for CVE-2024-56627: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56627 in master table +â³ Processing CVE-2024-56662... +🧪 Raw Title for CVE-2024-56662: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56662 in master table +â³ Processing CVE-2024-56659... +🧪 Raw Title for CVE-2024-56659: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56659 in master table +â³ Processing CVE-2024-56724... +🧪 Raw Title for CVE-2024-56724: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56724 in master table +â³ Processing CVE-2024-56728... +🧪 Raw Title for CVE-2024-56728: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56728 in master table +â³ Processing CVE-2024-56774... +🧪 Raw Title for CVE-2024-56774: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56774 in master table +â³ Processing CVE-2024-56777... +🧪 Raw Title for CVE-2024-56777: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56777 in master table +â³ Processing CVE-2024-57901... +🧪 Raw Title for CVE-2024-57901: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57901 in master table +â³ Processing CVE-2025-26596... +🧪 Raw Title for CVE-2025-26596: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26596 in master table +â³ Processing CVE-2025-26594... +🧪 Raw Title for CVE-2025-26594: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26594 in master table +â³ Processing CVE-2025-26595... +🧪 Raw Title for CVE-2025-26595: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26595 in master table +â³ Processing CVE-2025-26598... +🧪 Raw Title for CVE-2025-26598: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26598 in master table +â³ Processing CVE-2025-22134... +🧪 Raw Title for CVE-2025-22134: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-22134 in master table +â³ Processing CVE-2022-41862... +🧪 Raw Title for CVE-2022-41862: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-41862 in master table +â³ Processing CVE-2024-53859... +🧪 Raw Title for CVE-2024-53859: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53859 in master table +â³ Processing CVE-2024-36620... +🧪 Raw Title for CVE-2024-36620: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-36620 in master table +â³ Processing CVE-2024-10963... +🧪 Raw Title for CVE-2024-10963: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-10963 in master table +â³ Processing CVE-2023-40551... +🧪 Raw Title for CVE-2023-40551: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-40551 in master table +â³ Processing CVE-2024-56657... +🧪 Raw Title for CVE-2024-56657: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56657 in master table +â³ Processing CVE-2024-56763... +🧪 Raw Title for CVE-2024-56763: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56763 in master table +â³ Processing CVE-2024-57892... +🧪 Raw Title for CVE-2024-57892: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57892 in master table +â³ Processing CVE-2024-57980... +🧪 Raw Title for CVE-2024-57980: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57980 in master table +â³ Processing CVE-2025-21637... +🧪 Raw Title for CVE-2025-21637: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21637 in master table +â³ Processing CVE-2025-21718... +🧪 Raw Title for CVE-2025-21718: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21718 in master table +â³ Processing CVE-2024-3651... +🧪 Raw Title for CVE-2024-3651: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-3651 in master table +â³ Processing CVE-2015-2158... +🧪 Raw Title for CVE-2015-2158: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2015-2158 in master table +â³ Processing CVE-2020-14152... +🧪 Raw Title for CVE-2020-14152: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2020-14152 in master table +â³ Processing CVE-2024-56658... +🧪 Raw Title for CVE-2024-56658: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56658 in master table +â³ Processing CVE-2024-56710... +🧪 Raw Title for CVE-2024-56710: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56710 in master table +â³ Processing CVE-2024-57912... +🧪 Raw Title for CVE-2024-57912: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57912 in master table +â³ Processing CVE-2024-57978... +🧪 Raw Title for CVE-2024-57978: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57978 in master table +â³ Processing CVE-2025-21638... +🧪 Raw Title for CVE-2025-21638: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21638 in master table +â³ Processing CVE-2025-21680... +🧪 Raw Title for CVE-2025-21680: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21680 in master table +â³ Processing CVE-2025-21716... +🧪 Raw Title for CVE-2025-21716: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21716 in master table +â³ Processing CVE-2024-29195... +🧪 Raw Title for CVE-2024-29195: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-29195 in master table +â³ Processing CVE-2022-3162... +🧪 Raw Title for CVE-2022-3162: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-3162 in master table +â³ Processing CVE-2025-27219... +🧪 Raw Title for CVE-2025-27219: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27219 in master table +â³ Processing CVE-2025-27221... +🧪 Raw Title for CVE-2025-27221: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27221 in master table +â³ Processing CVE-2025-27220... +🧪 Raw Title for CVE-2025-27220: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27220 in master table +â³ Processing CVE-2024-1013... +🧪 Raw Title for CVE-2024-1013: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-1013 in master table +â³ Processing CVE-2024-8176... +🧪 Raw Title for CVE-2024-8176: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-8176 in master table +â³ Processing CVE-2024-8096... +🧪 Raw Title for CVE-2024-8096: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-8096 in master table +â³ Processing CVE-2025-22870... +🧪 Raw Title for CVE-2025-22870: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-22870 in master table +â³ Processing CVE-2024-33600... +🧪 Raw Title for CVE-2024-33600: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-33600 in master table +â³ Processing CVE-2024-33599... +🧪 Raw Title for CVE-2024-33599: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-33599 in master table +â³ Processing CVE-2025-21490... +🧪 Raw Title for CVE-2025-21490: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21490 in master table +â³ Processing CVE-2024-34397... +🧪 Raw Title for CVE-2024-34397: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-34397 in master table +â³ Processing CVE-2024-43806... +🧪 Raw Title for CVE-2024-43806: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-43806 in master table +â³ Processing CVE-2023-29942... +🧪 Raw Title for CVE-2023-29942: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-29942 in master table +â³ Processing CVE-2025-29786... +🧪 Raw Title for CVE-2025-29786: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-29786 in master table +â³ Processing CVE-2023-29935... +🧪 Raw Title for CVE-2023-29935: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-29935 in master table +â³ Processing CVE-2024-2511... +🧪 Raw Title for CVE-2024-2511: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-2511 in master table +â³ Processing CVE-2025-30348... +🧪 Raw Title for CVE-2025-30348: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-30348 in master table +â³ Processing CVE-2022-45142... +🧪 Raw Title for CVE-2022-45142: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-45142 in master table +â³ Processing CVE-2024-31580... +🧪 Raw Title for CVE-2024-31580: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-31580 in master table +â³ Processing CVE-2024-52006... +🧪 Raw Title for CVE-2024-52006: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-52006 in master table +â³ Processing CVE-2024-50349... +🧪 Raw Title for CVE-2024-50349: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-50349 in master table +â³ Processing CVE-2022-28737... +🧪 Raw Title for CVE-2022-28737: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-28737 in master table +â³ Processing CVE-2024-3727... +🧪 Raw Title for CVE-2024-3727: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-3727 in master table +â³ Processing CVE-2022-32149... +🧪 Raw Title for CVE-2022-32149: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-32149 in master table +â³ Processing CVE-2024-45338... +🧪 Raw Title for CVE-2024-45338: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-45338 in master table +â³ Processing CVE-2017-18207... +🧪 Raw Title for CVE-2017-18207: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2017-18207 in master table +â³ Processing CVE-2017-17522... +🧪 Raw Title for CVE-2017-17522: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2017-17522 in master table +â³ Processing CVE-2007-4559... +🧪 Raw Title for CVE-2007-4559: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2007-4559 in master table +â³ Processing CVE-2025-1176... +🧪 Raw Title for CVE-2025-1176: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1176 in master table +â³ Processing CVE-2025-1182... +🧪 Raw Title for CVE-2025-1182: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1182 in master table +â³ Processing CVE-2025-1181... +🧪 Raw Title for CVE-2025-1181: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1181 in master table +â³ Processing CVE-2025-1178... +🧪 Raw Title for CVE-2025-1178: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1178 in master table +â³ Processing CVE-2015-9251... +🧪 Raw Title for CVE-2015-9251: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2015-9251 in master table +â³ Processing CVE-2020-22217... +🧪 Raw Title for CVE-2020-22217: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2020-22217 in master table +â³ Processing CVE-2021-24032... +🧪 Raw Title for CVE-2021-24032: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2021-24032 in master table +â³ Processing CVE-2024-25629... +🧪 Raw Title for CVE-2024-25629: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-25629 in master table +â³ Processing CVE-2024-32465... +🧪 Raw Title for CVE-2024-32465: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-32465 in master table +â³ Processing CVE-2021-20286... +🧪 Raw Title for CVE-2021-20286: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2021-20286 in master table +â³ Processing CVE-2024-32021... +🧪 Raw Title for CVE-2024-32021: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-32021 in master table +â³ Processing CVE-2023-40549... +🧪 Raw Title for CVE-2023-40549: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-40549 in master table +â³ Processing CVE-2023-40546... +🧪 Raw Title for CVE-2023-40546: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-40546 in master table +â³ Processing CVE-2024-37535... +🧪 Raw Title for CVE-2024-37535: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-37535 in master table +â³ Processing CVE-2023-1393... +🧪 Raw Title for CVE-2023-1393: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-1393 in master table +â³ Processing CVE-2019-3833... +🧪 Raw Title for CVE-2019-3833: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2019-3833 in master table +â³ Processing CVE-2024-12133... +🧪 Raw Title for CVE-2024-12133: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-12133 in master table +â³ Processing CVE-2024-26943... +🧪 Raw Title for CVE-2024-26943: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-26943 in master table +â³ Processing CVE-2024-27026... +🧪 Raw Title for CVE-2024-27026: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-27026 in master table +â³ Processing CVE-2024-35790... +🧪 Raw Title for CVE-2024-35790: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-35790 in master table +â³ Processing CVE-2024-35792... +🧪 Raw Title for CVE-2024-35792: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-35792 in master table +â³ Processing CVE-2024-27061... +🧪 Raw Title for CVE-2024-27061: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-27061 in master table +â³ Processing CVE-2024-40982... +🧪 Raw Title for CVE-2024-40982: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-40982 in master table +â³ Processing CVE-2024-43098... +🧪 Raw Title for CVE-2024-43098: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-43098 in master table +â³ Processing CVE-2024-53146... +🧪 Raw Title for CVE-2024-53146: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53146 in master table +â³ Processing CVE-2025-22868... +🧪 Raw Title for CVE-2025-22868: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-22868 in master table +â³ Processing CVE-2024-53157... +🧪 Raw Title for CVE-2024-53157: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53157 in master table +â³ Processing CVE-2024-53156... +🧪 Raw Title for CVE-2024-53156: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53156 in master table +â³ Processing CVE-2024-53165... +🧪 Raw Title for CVE-2024-53165: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53165 in master table +â³ Processing CVE-2024-53171... +🧪 Raw Title for CVE-2024-53171: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53171 in master table +â³ Processing CVE-2024-56369... +🧪 Raw Title for CVE-2024-56369: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56369 in master table +â³ Processing CVE-2024-53227... +🧪 Raw Title for CVE-2024-53227: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53227 in master table +â³ Processing CVE-2024-53237... +🧪 Raw Title for CVE-2024-53237: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53237 in master table +â³ Processing CVE-2024-53217... +🧪 Raw Title for CVE-2024-53217: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53217 in master table +â³ Processing CVE-2024-56569... +🧪 Raw Title for CVE-2024-56569: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56569 in master table +â³ Processing CVE-2024-56572... +🧪 Raw Title for CVE-2024-56572: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56572 in master table +â³ Processing CVE-2024-56578... +🧪 Raw Title for CVE-2024-56578: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56578 in master table +â³ Processing CVE-2024-56574... +🧪 Raw Title for CVE-2024-56574: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56574 in master table +â³ Processing CVE-2024-56593... +🧪 Raw Title for CVE-2024-56593: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56593 in master table +â³ Processing CVE-2024-56622... +🧪 Raw Title for CVE-2024-56622: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56622 in master table +â³ Processing CVE-2024-56606... +🧪 Raw Title for CVE-2024-56606: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56606 in master table +â³ Processing CVE-2024-56601... +🧪 Raw Title for CVE-2024-56601: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56601 in master table +â³ Processing CVE-2024-56602... +🧪 Raw Title for CVE-2024-56602: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56602 in master table +â³ Processing CVE-2024-56698... +🧪 Raw Title for CVE-2024-56698: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56698 in master table +â³ Processing CVE-2024-56704... +🧪 Raw Title for CVE-2024-56704: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56704 in master table +â³ Processing CVE-2024-56715... +🧪 Raw Title for CVE-2024-56715: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56715 in master table +â³ Processing CVE-2024-56642... +🧪 Raw Title for CVE-2024-56642: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56642 in master table +â³ Processing CVE-2024-56716... +🧪 Raw Title for CVE-2024-56716: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56716 in master table +â³ Processing CVE-2024-56726... +🧪 Raw Title for CVE-2024-56726: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56726 in master table +â³ Processing CVE-2024-56746... +🧪 Raw Title for CVE-2024-56746: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56746 in master table +â³ Processing CVE-2024-56723... +🧪 Raw Title for CVE-2024-56723: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56723 in master table +â³ Processing CVE-2024-56739... +🧪 Raw Title for CVE-2024-56739: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56739 in master table +â³ Processing CVE-2024-56748... +🧪 Raw Title for CVE-2024-56748: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56748 in master table +â³ Processing CVE-2024-56776... +🧪 Raw Title for CVE-2024-56776: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56776 in master table +â³ Processing CVE-2024-56779... +🧪 Raw Title for CVE-2024-56779: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56779 in master table +â³ Processing CVE-2024-56778... +🧪 Raw Title for CVE-2024-56778: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56778 in master table +â³ Processing CVE-2024-56780... +🧪 Raw Title for CVE-2024-56780: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56780 in master table +â³ Processing CVE-2024-56785... +🧪 Raw Title for CVE-2024-56785: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56785 in master table +â³ Processing CVE-2024-57874... +🧪 Raw Title for CVE-2024-57874: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57874 in master table +â³ Processing CVE-2024-57896... +🧪 Raw Title for CVE-2024-57896: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57896 in master table +â³ Processing CVE-2024-57841... +🧪 Raw Title for CVE-2024-57841: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57841 in master table +â³ Processing CVE-2024-57890... +🧪 Raw Title for CVE-2024-57890: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57890 in master table +â³ Processing CVE-2024-36476... +🧪 Raw Title for CVE-2024-36476: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-36476 in master table +â³ Processing CVE-2024-57946... +🧪 Raw Title for CVE-2024-57946: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57946 in master table +â³ Processing CVE-2024-9287... +🧪 Raw Title for CVE-2024-9287: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-9287 in master table +â³ Processing CVE-2025-22869... +🧪 Raw Title for CVE-2025-22869: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-22869 in master table +â³ Processing CVE-2024-50051... +🧪 Raw Title for CVE-2024-50051: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-50051 in master table +â³ Processing CVE-2024-48881... +🧪 Raw Title for CVE-2024-48881: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-48881 in master table +â³ Processing CVE-2024-53145... +🧪 Raw Title for CVE-2024-53145: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53145 in master table +â³ Processing CVE-2024-53096... +🧪 Raw Title for CVE-2024-53096: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53096 in master table +â³ Processing CVE-2024-53206... +🧪 Raw Title for CVE-2024-53206: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53206 in master table +â³ Processing CVE-2024-53239... +🧪 Raw Title for CVE-2024-53239: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53239 in master table +â³ Processing CVE-2024-53173... +🧪 Raw Title for CVE-2024-53173: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53173 in master table +â³ Processing CVE-2024-53226... +🧪 Raw Title for CVE-2024-53226: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53226 in master table +â³ Processing CVE-2024-56575... +🧪 Raw Title for CVE-2024-56575: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56575 in master table +â³ Processing CVE-2024-56581... +🧪 Raw Title for CVE-2024-56581: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56581 in master table +â³ Processing CVE-2024-56595... +🧪 Raw Title for CVE-2024-56595: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56595 in master table +â³ Processing CVE-2024-56587... +🧪 Raw Title for CVE-2024-56587: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56587 in master table +â³ Processing CVE-2024-56596... +🧪 Raw Title for CVE-2024-56596: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56596 in master table +â³ Processing CVE-2024-56614... +🧪 Raw Title for CVE-2024-56614: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56614 in master table +â³ Processing CVE-2024-56605... +🧪 Raw Title for CVE-2024-56605: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56605 in master table +â³ Processing CVE-2024-56615... +🧪 Raw Title for CVE-2024-56615: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56615 in master table +â³ Processing CVE-2024-56603... +🧪 Raw Title for CVE-2024-56603: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56603 in master table +â³ Processing CVE-2024-56623... +🧪 Raw Title for CVE-2024-56623: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56623 in master table +â³ Processing CVE-2024-56643... +🧪 Raw Title for CVE-2024-56643: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56643 in master table +â³ Processing CVE-2024-56650... +🧪 Raw Title for CVE-2024-56650: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56650 in master table +â³ Processing CVE-2024-56648... +🧪 Raw Title for CVE-2024-56648: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56648 in master table +â³ Processing CVE-2024-56629... +🧪 Raw Title for CVE-2024-56629: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56629 in master table +â³ Processing CVE-2024-56670... +🧪 Raw Title for CVE-2024-56670: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56670 in master table +â³ Processing CVE-2024-56694... +🧪 Raw Title for CVE-2024-56694: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56694 in master table +â³ Processing CVE-2024-56688... +🧪 Raw Title for CVE-2024-56688: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56688 in master table +â³ Processing CVE-2024-56708... +🧪 Raw Title for CVE-2024-56708: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56708 in master table +â³ Processing CVE-2024-56747... +🧪 Raw Title for CVE-2024-56747: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56747 in master table +â³ Processing CVE-2024-56745... +🧪 Raw Title for CVE-2024-56745: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56745 in master table +â³ Processing CVE-2024-56756... +🧪 Raw Title for CVE-2024-56756: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56756 in master table +â³ Processing CVE-2024-56770... +🧪 Raw Title for CVE-2024-56770: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56770 in master table +â³ Processing CVE-2024-56781... +🧪 Raw Title for CVE-2024-56781: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56781 in master table +â³ Processing CVE-2024-56787... +🧪 Raw Title for CVE-2024-56787: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56787 in master table +â³ Processing CVE-2024-57850... +🧪 Raw Title for CVE-2024-57850: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57850 in master table +â³ Processing CVE-2024-57902... +🧪 Raw Title for CVE-2024-57902: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57902 in master table +â³ Processing CVE-2024-50302... +🧪 Raw Title for CVE-2024-50302: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-50302 in master table +â³ Processing CVE-2025-27516... +🧪 Raw Title for CVE-2025-27516: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27516 in master table +â³ Processing CVE-2025-26600... +🧪 Raw Title for CVE-2025-26600: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26600 in master table +â³ Processing CVE-2025-26597... +🧪 Raw Title for CVE-2025-26597: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26597 in master table +â³ Processing CVE-2025-1744... +🧪 Raw Title for CVE-2025-1744: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1744 in master table +â³ Processing CVE-2025-27423... +🧪 Raw Title for CVE-2025-27423: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27423 in master table +â³ Processing CVE-2025-26599... +🧪 Raw Title for CVE-2025-26599: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26599 in master table +â³ Processing CVE-2025-26601... +🧪 Raw Title for CVE-2025-26601: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26601 in master table +â³ Processing CVE-2024-43802... +🧪 Raw Title for CVE-2024-43802: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-43802 in master table +â³ Processing CVE-2024-45337... +🧪 Raw Title for CVE-2024-45337: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-45337 in master table +â³ Processing CVE-2024-36621... +🧪 Raw Title for CVE-2024-36621: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-36621 in master table +â³ Processing CVE-2024-36623... +🧪 Raw Title for CVE-2024-36623: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-36623 in master table +â³ Processing CVE-2023-6121... +🧪 Raw Title for CVE-2023-6121: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-6121 in master table +â³ Processing CVE-2023-6817... +🧪 Raw Title for CVE-2023-6817: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-6817 in master table +â³ Processing CVE-2023-2455... +🧪 Raw Title for CVE-2023-2455: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-2455 in master table +â³ Processing CVE-2025-0665... +🧪 Raw Title for CVE-2025-0665: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-0665 in master table +â³ Processing CVE-2025-0167... +🧪 Raw Title for CVE-2025-0167: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-0167 in master table +â³ Processing CVE-2024-11053... +🧪 Raw Title for CVE-2024-11053: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-11053 in master table +â³ Processing CVE-2025-0633... +🧪 Raw Title for CVE-2025-0633: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-0633 in master table +â³ Processing CVE-2023-48795... +🧪 Raw Title for CVE-2023-48795: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-48795 in master table +â³ Processing CVE-2024-6874... +🧪 Raw Title for CVE-2024-6874: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-6874 in master table +â³ Processing CVE-2024-47141... +🧪 Raw Title for CVE-2024-47141: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-47141 in master table +â³ Processing CVE-2024-48875... +🧪 Raw Title for CVE-2024-48875: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-48875 in master table +â³ Processing CVE-2024-54680... +🧪 Raw Title for CVE-2024-54680: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-54680 in master table +â³ Processing CVE-2024-56582... +🧪 Raw Title for CVE-2024-56582: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56582 in master table +â³ Processing CVE-2024-56613... +🧪 Raw Title for CVE-2024-56613: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56613 in master table +â³ Processing CVE-2024-56611... +🧪 Raw Title for CVE-2024-56611: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56611 in master table +â³ Processing CVE-2024-56617... +🧪 Raw Title for CVE-2024-56617: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56617 in master table +â³ Processing CVE-2024-56649... +🧪 Raw Title for CVE-2024-56649: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56649 in master table +â³ Processing CVE-2024-56653... +🧪 Raw Title for CVE-2024-56653: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56653 in master table +â³ Processing CVE-2024-56654... +🧪 Raw Title for CVE-2024-56654: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56654 in master table +â³ Processing CVE-2024-56655... +🧪 Raw Title for CVE-2024-56655: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56655 in master table +â³ Processing CVE-2024-56663... +🧪 Raw Title for CVE-2024-56663: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56663 in master table +â³ Processing CVE-2024-56667... +🧪 Raw Title for CVE-2024-56667: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56667 in master table +â³ Processing CVE-2024-56703... +🧪 Raw Title for CVE-2024-56703: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56703 in master table +â³ Processing CVE-2024-56718... +🧪 Raw Title for CVE-2024-56718: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56718 in master table +â³ Processing CVE-2024-56719... +🧪 Raw Title for CVE-2024-56719: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56719 in master table +â³ Processing CVE-2024-56767... +🧪 Raw Title for CVE-2024-56767: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56767 in master table +â³ Processing CVE-2024-56769... +🧪 Raw Title for CVE-2024-56769: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56769 in master table +â³ Processing CVE-2024-57801... +🧪 Raw Title for CVE-2024-57801: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57801 in master table +â³ Processing CVE-2024-57882... +🧪 Raw Title for CVE-2024-57882: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57882 in master table +â³ Processing CVE-2024-57887... +🧪 Raw Title for CVE-2024-57887: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57887 in master table +â³ Processing CVE-2024-57908... +🧪 Raw Title for CVE-2024-57908: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57908 in master table +â³ Processing CVE-2024-57922... +🧪 Raw Title for CVE-2024-57922: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57922 in master table +â³ Processing CVE-2024-57910... +🧪 Raw Title for CVE-2024-57910: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57910 in master table +â³ Processing CVE-2024-57916... +🧪 Raw Title for CVE-2024-57916: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57916 in master table +â³ Processing CVE-2024-57925... +🧪 Raw Title for CVE-2024-57925: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57925 in master table +â³ Processing CVE-2024-57933... +🧪 Raw Title for CVE-2024-57933: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57933 in master table +â³ Processing CVE-2024-57926... +🧪 Raw Title for CVE-2024-57926: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57926 in master table +â³ Processing CVE-2024-57939... +🧪 Raw Title for CVE-2024-57939: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57939 in master table +â³ Processing CVE-2024-57973... +🧪 Raw Title for CVE-2024-57973: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57973 in master table +â³ Processing CVE-2024-57981... +🧪 Raw Title for CVE-2024-57981: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57981 in master table +â³ Processing CVE-2024-57996... +🧪 Raw Title for CVE-2024-57996: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57996 in master table +â³ Processing CVE-2024-58007... +🧪 Raw Title for CVE-2024-58007: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-58007 in master table +â³ Processing CVE-2024-58017... +🧪 Raw Title for CVE-2024-58017: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-58017 in master table +â³ Processing CVE-2024-58011... +🧪 Raw Title for CVE-2024-58011: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-58011 in master table +â³ Processing CVE-2025-21640... +🧪 Raw Title for CVE-2025-21640: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21640 in master table +â³ Processing CVE-2025-21642... +🧪 Raw Title for CVE-2025-21642: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21642 in master table +â³ Processing CVE-2025-21652... +🧪 Raw Title for CVE-2025-21652: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21652 in master table +â³ Processing CVE-2025-21667... +🧪 Raw Title for CVE-2025-21667: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21667 in master table +â³ Processing CVE-2025-21658... +🧪 Raw Title for CVE-2025-21658: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21658 in master table +â³ Processing CVE-2025-21669... +🧪 Raw Title for CVE-2025-21669: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21669 in master table +â³ Processing CVE-2025-21670... +🧪 Raw Title for CVE-2025-21670: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21670 in master table +â³ Processing CVE-2025-21674... +🧪 Raw Title for CVE-2025-21674: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21674 in master table +â³ Processing CVE-2025-21675... +🧪 Raw Title for CVE-2025-21675: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21675 in master table +â³ Processing CVE-2025-21681... +🧪 Raw Title for CVE-2025-21681: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21681 in master table +â³ Processing CVE-2025-21683... +🧪 Raw Title for CVE-2025-21683: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21683 in master table +â³ Processing CVE-2025-21692... +🧪 Raw Title for CVE-2025-21692: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21692 in master table +â³ Processing CVE-2025-21697... +🧪 Raw Title for CVE-2025-21697: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21697 in master table +â³ Processing CVE-2025-21694... +🧪 Raw Title for CVE-2025-21694: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21694 in master table +â³ Processing CVE-2025-21707... +🧪 Raw Title for CVE-2025-21707: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21707 in master table +â³ Processing CVE-2025-21711... +🧪 Raw Title for CVE-2025-21711: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21711 in master table +â³ Processing CVE-2025-21743... +🧪 Raw Title for CVE-2025-21743: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21743 in master table +â³ Processing CVE-2025-21748... +🧪 Raw Title for CVE-2025-21748: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21748 in master table +â³ Processing CVE-2025-21749... +🧪 Raw Title for CVE-2025-21749: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21749 in master table +â³ Processing CVE-2025-21820... +🧪 Raw Title for CVE-2025-21820: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21820 in master table +â³ Processing CVE-2025-0426... +🧪 Raw Title for CVE-2025-0426: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-0426 in master table +â³ Processing CVE-2020-13435... +🧪 Raw Title for CVE-2020-13435: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2020-13435 in master table +â³ Processing CVE-2024-56171... +🧪 Raw Title for CVE-2024-56171: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56171 in master table +â³ Processing CVE-2025-24928... +🧪 Raw Title for CVE-2025-24928: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-24928 in master table +â³ Processing CVE-2025-27113... +🧪 Raw Title for CVE-2025-27113: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27113 in master table +â³ Processing CVE-2024-13176... +🧪 Raw Title for CVE-2024-13176: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-13176 in master table +â³ Processing CVE-2024-28757... +🧪 Raw Title for CVE-2024-28757: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-28757 in master table +â³ Processing CVE-2023-45803... +🧪 Raw Title for CVE-2023-45803: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-45803 in master table +â³ Processing CVE-2024-28180... +🧪 Raw Title for CVE-2024-28180: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-28180 in master table +â³ Processing CVE-2024-3219... +🧪 Raw Title for CVE-2024-3219: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-3219 in master table +â³ Processing CVE-2024-4032... +🧪 Raw Title for CVE-2024-4032: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-4032 in master table +â³ Processing CVE-2024-45490... +🧪 Raw Title for CVE-2024-45490: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-45490 in master table +â³ Processing CVE-2024-50602... +🧪 Raw Title for CVE-2024-50602: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-50602 in master table +â³ Processing CVE-2024-45492... +🧪 Raw Title for CVE-2024-45492: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-45492 in master table +â³ Processing CVE-2025-0938... +🧪 Raw Title for CVE-2025-0938: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-0938 in master table +â³ Processing CVE-2025-1215... +🧪 Raw Title for CVE-2025-1215: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1215 in master table +â³ Processing CVE-2025-26603... +🧪 Raw Title for CVE-2025-26603: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26603 in master table +â³ Processing CVE-2019-25219... +🧪 Raw Title for CVE-2019-25219: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2019-25219 in master table +â³ Processing CVE-2023-52160... +🧪 Raw Title for CVE-2023-52160: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-52160 in master table +â³ Processing CVE-2024-24826... +🧪 Raw Title for CVE-2024-24826: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-24826 in master table +â³ Processing CVE-2024-25112... +🧪 Raw Title for CVE-2024-25112: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-25112 in master table +â³ Processing CVE-2016-10087... +🧪 Raw Title for CVE-2016-10087: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2016-10087 in master table +â³ Processing CVE-2016-9840... +🧪 Raw Title for CVE-2016-9840: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2016-9840 in master table +â³ Processing CVE-2016-9841... +🧪 Raw Title for CVE-2016-9841: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2016-9841 in master table +â³ Processing CVE-2016-9842... +🧪 Raw Title for CVE-2016-9842: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2016-9842 in master table +â³ Processing CVE-2016-9843... +🧪 Raw Title for CVE-2016-9843: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2016-9843 in master table +â³ Processing CVE-2023-6992... +🧪 Raw Title for CVE-2023-6992: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-6992 in master table +â³ Processing CVE-2023-25564... +🧪 Raw Title for CVE-2023-25564: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-25564 in master table +â³ Processing CVE-2023-25567... +🧪 Raw Title for CVE-2023-25567: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-25567 in master table +â³ Processing CVE-2023-25566... +🧪 Raw Title for CVE-2023-25566: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-25566 in master table +â³ Processing CVE-2004-2779... +🧪 Raw Title for CVE-2004-2779: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2004-2779 in master table +â³ Processing CVE-2024-36039... +🧪 Raw Title for CVE-2024-36039: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-36039 in master table +â³ Processing CVE-2024-49769... +🧪 Raw Title for CVE-2024-49769: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-49769 in master table +â³ Processing CVE-2024-34403... +🧪 Raw Title for CVE-2024-34403: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-34403 in master table +â³ Processing CVE-2024-51744... +🧪 Raw Title for CVE-2024-51744: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-51744 in master table +â³ Processing CVE-2024-7264... +🧪 Raw Title for CVE-2024-7264: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-7264 in master table +â³ Processing CVE-2023-3978... +🧪 Raw Title for CVE-2023-3978: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-3978 in master table +â³ Processing CVE-2025-0725... +🧪 Raw Title for CVE-2025-0725: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-0725 in master table +â³ Processing CVE-2024-10846... +🧪 Raw Title for CVE-2024-10846: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-10846 in master table +â³ Processing CVE-2024-47809... +🧪 Raw Title for CVE-2024-47809: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-47809 in master table +â³ Processing CVE-2025-25204... +🧪 Raw Title for CVE-2025-25204: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-25204 in master table +â³ Processing CVE-2024-48873... +🧪 Raw Title for CVE-2024-48873: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-48873 in master table +â³ Processing CVE-2024-53179... +🧪 Raw Title for CVE-2024-53179: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53179 in master table +â³ Processing CVE-2024-54683... +🧪 Raw Title for CVE-2024-54683: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-54683 in master table +â³ Processing CVE-2024-56631... +🧪 Raw Title for CVE-2024-56631: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56631 in master table +â³ Processing CVE-2024-56635... +🧪 Raw Title for CVE-2024-56635: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56635 in master table +â³ Processing CVE-2024-56604... +🧪 Raw Title for CVE-2024-56604: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56604 in master table +â³ Processing CVE-2024-56651... +🧪 Raw Title for CVE-2024-56651: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56651 in master table +â³ Processing CVE-2024-56660... +🧪 Raw Title for CVE-2024-56660: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56660 in master table +â³ Processing CVE-2024-56665... +🧪 Raw Title for CVE-2024-56665: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56665 in master table +â³ Processing CVE-2024-56664... +🧪 Raw Title for CVE-2024-56664: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56664 in master table +â³ Processing CVE-2024-56672... +🧪 Raw Title for CVE-2024-56672: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56672 in master table +â³ Processing CVE-2024-56675... +🧪 Raw Title for CVE-2024-56675: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56675 in master table +â³ Processing CVE-2024-56717... +🧪 Raw Title for CVE-2024-56717: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56717 in master table +â³ Processing CVE-2024-56760... +🧪 Raw Title for CVE-2024-56760: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56760 in master table +â³ Processing CVE-2024-56783... +🧪 Raw Title for CVE-2024-56783: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56783 in master table +â³ Processing CVE-2024-56765... +🧪 Raw Title for CVE-2024-56765: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56765 in master table +â³ Processing CVE-2024-56766... +🧪 Raw Title for CVE-2024-56766: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56766 in master table +â³ Processing CVE-2024-56786... +🧪 Raw Title for CVE-2024-56786: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56786 in master table +â³ Processing CVE-2024-57798... +🧪 Raw Title for CVE-2024-57798: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57798 in master table +â³ Processing CVE-2024-57895... +🧪 Raw Title for CVE-2024-57895: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57895 in master table +â³ Processing CVE-2024-57906... +🧪 Raw Title for CVE-2024-57906: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57906 in master table +â³ Processing CVE-2024-57907... +🧪 Raw Title for CVE-2024-57907: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57907 in master table +â³ Processing CVE-2024-57911... +🧪 Raw Title for CVE-2024-57911: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57911 in master table +â³ Processing CVE-2024-57913... +🧪 Raw Title for CVE-2024-57913: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57913 in master table +â³ Processing CVE-2024-57940... +🧪 Raw Title for CVE-2024-57940: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57940 in master table +â³ Processing CVE-2024-57949... +🧪 Raw Title for CVE-2024-57949: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57949 in master table +â³ Processing CVE-2024-57951... +🧪 Raw Title for CVE-2024-57951: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57951 in master table +â³ Processing CVE-2024-57997... +🧪 Raw Title for CVE-2024-57997: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57997 in master table +â³ Processing CVE-2024-58005... +🧪 Raw Title for CVE-2024-58005: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-58005 in master table +â³ Processing CVE-2024-58010... +🧪 Raw Title for CVE-2024-58010: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-58010 in master table +â³ Processing CVE-2025-21636... +🧪 Raw Title for CVE-2025-21636: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21636 in master table +â³ Processing CVE-2025-21631... +🧪 Raw Title for CVE-2025-21631: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21631 in master table +â³ Processing CVE-2025-21639... +🧪 Raw Title for CVE-2025-21639: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21639 in master table +â³ Processing CVE-2025-21666... +🧪 Raw Title for CVE-2025-21666: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21666 in master table +â³ Processing CVE-2025-21665... +🧪 Raw Title for CVE-2025-21665: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21665 in master table +â³ Processing CVE-2025-21673... +🧪 Raw Title for CVE-2025-21673: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21673 in master table +â³ Processing CVE-2025-21676... +🧪 Raw Title for CVE-2025-21676: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21676 in master table +â³ Processing CVE-2025-21684... +🧪 Raw Title for CVE-2025-21684: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21684 in master table +â³ Processing CVE-2025-21689... +🧪 Raw Title for CVE-2025-21689: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21689 in master table +â³ Processing CVE-2025-21687... +🧪 Raw Title for CVE-2025-21687: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21687 in master table +â³ Processing CVE-2025-21690... +🧪 Raw Title for CVE-2025-21690: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21690 in master table +â³ Processing CVE-2025-21699... +🧪 Raw Title for CVE-2025-21699: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21699 in master table +â³ Processing CVE-2025-21735... +🧪 Raw Title for CVE-2025-21735: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21735 in master table +â³ Processing CVE-2025-21736... +🧪 Raw Title for CVE-2025-21736: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21736 in master table +â³ Processing CVE-2025-21741... +🧪 Raw Title for CVE-2025-21741: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21741 in master table +â³ Processing CVE-2025-21742... +🧪 Raw Title for CVE-2025-21742: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21742 in master table +â³ Processing CVE-2025-21744... +🧪 Raw Title for CVE-2025-21744: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21744 in master table +â³ Processing CVE-2025-21745... +🧪 Raw Title for CVE-2025-21745: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21745 in master table +â³ Processing CVE-2025-21814... +🧪 Raw Title for CVE-2025-21814: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21814 in master table +â³ Processing CVE-2025-1390... +🧪 Raw Title for CVE-2025-1390: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1390 in master table +â³ Processing CVE-2024-25062... +🧪 Raw Title for CVE-2024-25062: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-25062 in master table +â³ Processing CVE-2025-23359... +🧪 Raw Title for CVE-2025-23359: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-23359 in master table +â³ Processing CVE-2024-12797... +🧪 Raw Title for CVE-2024-12797: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-12797 in master table +â³ Processing CVE-2024-9143... +🧪 Raw Title for CVE-2024-9143: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-9143 in master table +â³ Processing CVE-2024-37891... +🧪 Raw Title for CVE-2024-37891: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-37891 in master table +â³ Processing CVE-2024-4030... +🧪 Raw Title for CVE-2024-4030: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-4030 in master table +â³ Processing CVE-2024-45491... +🧪 Raw Title for CVE-2024-45491: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-45491 in master table +â³ Processing CVE-2023-44398... +🧪 Raw Title for CVE-2023-44398: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-44398 in master table +â³ Processing CVE-2024-39695... +🧪 Raw Title for CVE-2024-39695: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-39695 in master table +â³ Processing CVE-2015-8126... +🧪 Raw Title for CVE-2015-8126: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2015-8126 in master table +â³ Processing CVE-2015-8472... +🧪 Raw Title for CVE-2015-8472: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2015-8472 in master table +â³ Processing CVE-2017-12652... +🧪 Raw Title for CVE-2017-12652: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2017-12652 in master table +â³ Processing CVE-2023-25563... +🧪 Raw Title for CVE-2023-25563: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-25563 in master table +â³ Processing CVE-2019-7317... +🧪 Raw Title for CVE-2019-7317: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2019-7317 in master table +â³ Processing CVE-2023-25565... +🧪 Raw Title for CVE-2023-25565: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-25565 in master table +â³ Processing CVE-2023-40305... +🧪 Raw Title for CVE-2023-40305: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-40305 in master table +â³ Processing CVE-2017-11550... +🧪 Raw Title for CVE-2017-11550: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2017-11550 in master table +â³ Processing CVE-2017-11551... +🧪 Raw Title for CVE-2017-11551: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2017-11551 in master table +â³ Processing CVE-2018-7263... +🧪 Raw Title for CVE-2018-7263: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2018-7263 in master table +â³ Processing CVE-2023-39976... +🧪 Raw Title for CVE-2023-39976: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-39976 in master table +â³ Processing CVE-2023-35789... +🧪 Raw Title for CVE-2023-35789: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-35789 in master table +â³ Processing CVE-2022-43357... +🧪 Raw Title for CVE-2022-43357: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-43357 in master table +â³ Processing CVE-2022-26592... +🧪 Raw Title for CVE-2022-26592: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-26592 in master table +â³ Processing CVE-2022-43358... +🧪 Raw Title for CVE-2022-43358: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-43358 in master table +â³ Processing CVE-2023-28370... +🧪 Raw Title for CVE-2023-28370: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-28370 in master table +â³ Processing CVE-2022-24761... +🧪 Raw Title for CVE-2022-24761: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-24761 in master table +â³ Processing CVE-2022-31015... +🧪 Raw Title for CVE-2022-31015: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-31015 in master table +â³ Processing CVE-2018-25032... +🧪 Raw Title for CVE-2018-25032: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2018-25032 in master table +â³ Processing CVE-2022-37434... +🧪 Raw Title for CVE-2022-37434: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-37434 in master table +â³ Processing CVE-2024-34402... +🧪 Raw Title for CVE-2024-34402: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-34402 in master table +â³ Processing CVE-2024-30161... +🧪 Raw Title for CVE-2024-30161: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-30161 in master table +â³ Processing CVE-2023-35945... +🧪 Raw Title for CVE-2023-35945: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-35945 in master table +â³ Processing CVE-2024-53899... +🧪 Raw Title for CVE-2024-53899: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53899 in master table +â³ Processing CVE-2025-27363... +🧪 Raw Title for CVE-2025-27363: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27363 in master table +â³ Processing CVE-2024-26651... +🧪 Raw Title for CVE-2024-26651: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-26651 in master table +â³ Processing CVE-2025-1550... +🧪 Raw Title for CVE-2025-1550: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1550 in master table +â³ Processing CVE-2024-33601... +🧪 Raw Title for CVE-2024-33601: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-33601 in master table +â³ Processing CVE-2024-53427... +🧪 Raw Title for CVE-2024-53427: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53427 in master table +â³ Processing CVE-2023-29933... +🧪 Raw Title for CVE-2023-29933: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-29933 in master table +â³ Processing CVE-2025-25724... +🧪 Raw Title for CVE-2025-25724: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-25724 in master table +â³ Processing CVE-2024-25580... +🧪 Raw Title for CVE-2024-25580: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-25580 in master table +â³ Processing CVE-2023-29941... +🧪 Raw Title for CVE-2023-29941: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-29941 in master table +â³ Processing CVE-2024-46901... +🧪 Raw Title for CVE-2024-46901: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-46901 in master table +â³ Processing CVE-2024-53257... +🧪 Raw Title for CVE-2024-53257: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53257 in master table +â³ Processing CVE-2023-29932... +🧪 Raw Title for CVE-2023-29932: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-29932 in master table +â³ Processing CVE-2023-34410... +🧪 Raw Title for CVE-2023-34410: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-34410 in master table +â³ Processing CVE-2023-31147... +🧪 Raw Title for CVE-2023-31147: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-31147 in master table +â³ Processing CVE-2024-53920... +🧪 Raw Title for CVE-2024-53920: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53920 in master table +â³ Processing CVE-2024-55549... +🧪 Raw Title for CVE-2024-55549: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-55549 in master table +â³ Processing CVE-2024-12243... +🧪 Raw Title for CVE-2024-12243: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-12243 in master table +â³ Processing CVE-2025-24855... +🧪 Raw Title for CVE-2025-24855: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-24855 in master table +â³ Processing CVE-2024-28863... +🧪 Raw Title for CVE-2024-28863: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-28863 in master table +â³ Processing CVE-2025-29768... +🧪 Raw Title for CVE-2025-29768: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-29768 in master table +â³ Processing CVE-2023-6683... +🧪 Raw Title for CVE-2023-6683: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-6683 in master table +â³ Processing CVE-2023-6693... +🧪 Raw Title for CVE-2023-6693: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-6693 in master table +â³ Processing CVE-2023-5088... +🧪 Raw Title for CVE-2023-5088: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-5088 in master table +â³ Processing CVE-2020-8565... +🧪 Raw Title for CVE-2020-8565: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2020-8565 in master table +â³ Processing CVE-2023-6004... +🧪 Raw Title for CVE-2023-6004: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-6004 in master table +â³ Processing CVE-2023-6918... +🧪 Raw Title for CVE-2023-6918: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-6918 in master table +â³ Processing CVE-2023-46137... +🧪 Raw Title for CVE-2023-46137: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-46137 in master table +â³ Processing CVE-2025-29806... +🧪 Raw Title for CVE-2025-29806: { + "Value": "Microsoft Edge (Chromium-based) Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Edge (Chromium-based) Remote Code Execution Vulnerability" +✅ Updated CVE-2025-29806 in master table +â³ Processing CVE-2025-24071... +🧪 Raw Title for CVE-2025-24071: { + "Value": "Microsoft Windows File Explorer Spoofing Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Windows File Explorer Spoofing Vulnerability" +✅ Updated CVE-2025-24071 in master table +🎉 Enrichment complete for 2025-Mar +[16 Apr 2025, 02:35:54 pm] ✅ enrichCVE_MSRC.js finished with exit code: 0 +[21 Apr 2025, 06:39:12 pm] 🚀 📡 MSRC sync launched in background. +🚀 Starting MSRC enrichment of CVEs... +📡 Fetching CVEs for 2025-Mar... +📋 Found 537 vulnerabilities. +â³ Processing CVE-2025-24513... +🧪 Raw Title for CVE-2025-24513: { + "Value": "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +} +âž¡ï¸ Parsed Title: "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +✅ Updated CVE-2025-24513 in master table +â³ Processing CVE-2025-24035... +🧪 Raw Title for CVE-2025-24035: { + "Value": "Windows Remote Desktop Services Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Remote Desktop Services Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24035 in master table +â³ Processing CVE-2024-9157... +🧪 Raw Title for CVE-2024-9157: { + "Value": "Synaptics: CVE-2024-9157 Synaptics Service Binaries DLL Loading Vulnerability" +} +âž¡ï¸ Parsed Title: "Synaptics: CVE-2024-9157 Synaptics Service Binaries DLL Loading Vulnerability" +✅ Updated CVE-2024-9157 in master table +â³ Processing CVE-2025-24044... +🧪 Raw Title for CVE-2025-24044: { + "Value": "Windows Win32 Kernel Subsystem Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Win32 Kernel Subsystem Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24044 in master table +â³ Processing CVE-2025-24043... +🧪 Raw Title for CVE-2025-24043: { + "Value": "WinDbg Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "WinDbg Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24043 in master table +â³ Processing CVE-2025-24057... +🧪 Raw Title for CVE-2025-24057: { + "Value": "Microsoft Office Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Office Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24057 in master table +â³ Processing CVE-2025-24070... +🧪 Raw Title for CVE-2025-24070: { + "Value": "ASP.NET Core and Visual Studio Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "ASP.NET Core and Visual Studio Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24070 in master table +â³ Processing CVE-2025-24077... +🧪 Raw Title for CVE-2025-24077: { + "Value": "Microsoft Word Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Word Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24077 in master table +â³ Processing CVE-2025-24078... +🧪 Raw Title for CVE-2025-24078: { + "Value": "Microsoft Word Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Word Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24078 in master table +â³ Processing CVE-2025-24079... +🧪 Raw Title for CVE-2025-24079: { + "Value": "Microsoft Word Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Word Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24079 in master table +â³ Processing CVE-2025-24080... +🧪 Raw Title for CVE-2025-24080: { + "Value": "Microsoft Office Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Office Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24080 in master table +â³ Processing CVE-2025-24081... +🧪 Raw Title for CVE-2025-24081: { + "Value": "Microsoft Excel Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Excel Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24081 in master table +â³ Processing CVE-2025-24082... +🧪 Raw Title for CVE-2025-24082: { + "Value": "Microsoft Excel Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Excel Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24082 in master table +â³ Processing CVE-2025-24083... +🧪 Raw Title for CVE-2025-24083: { + "Value": "Microsoft Office Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Office Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24083 in master table +â³ Processing CVE-2025-24986... +🧪 Raw Title for CVE-2025-24986: { + "Value": "Azure Promptflow Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Azure Promptflow Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24986 in master table +â³ Processing CVE-2025-24987... +🧪 Raw Title for CVE-2025-24987: { + "Value": "Windows USB Video Class System Driver Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows USB Video Class System Driver Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24987 in master table +â³ Processing CVE-2025-24988... +🧪 Raw Title for CVE-2025-24988: { + "Value": "Windows USB Video Class System Driver Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows USB Video Class System Driver Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24988 in master table +â³ Processing CVE-2025-21180... +🧪 Raw Title for CVE-2025-21180: { + "Value": "Windows exFAT File System Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows exFAT File System Remote Code Execution Vulnerability" +✅ Updated CVE-2025-21180 in master table +â³ Processing CVE-2025-24995... +🧪 Raw Title for CVE-2025-24995: { + "Value": "Kernel Streaming WOW Thunk Service Driver Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Kernel Streaming WOW Thunk Service Driver Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24995 in master table +â³ Processing CVE-2025-24996... +🧪 Raw Title for CVE-2025-24996: { + "Value": "NTLM Hash Disclosure Spoofing Vulnerability" +} +âž¡ï¸ Parsed Title: "NTLM Hash Disclosure Spoofing Vulnerability" +✅ Updated CVE-2025-24996 in master table +â³ Processing CVE-2025-24997... +🧪 Raw Title for CVE-2025-24997: { + "Value": "DirectX Graphics Kernel File Denial of Service Vulnerability" +} +âž¡ï¸ Parsed Title: "DirectX Graphics Kernel File Denial of Service Vulnerability" +✅ Updated CVE-2025-24997 in master table +â³ Processing CVE-2025-24998... +🧪 Raw Title for CVE-2025-24998: { + "Value": "Visual Studio Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Visual Studio Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24998 in master table +â³ Processing CVE-2025-25003... +🧪 Raw Title for CVE-2025-25003: { + "Value": "Visual Studio Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Visual Studio Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-25003 in master table +â³ Processing CVE-2025-25008... +🧪 Raw Title for CVE-2025-25008: { + "Value": "Windows Server Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Server Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-25008 in master table +â³ Processing CVE-2025-1919... +🧪 Raw Title for CVE-2025-1919: { + "Value": "Chromium: CVE-2025-1919 Out of bounds read in Media" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1919 Out of bounds read in Media" +✅ Updated CVE-2025-1919 in master table +â³ Processing CVE-2025-1916... +🧪 Raw Title for CVE-2025-1916: { + "Value": "Chromium: CVE-2025-1916 Use after free in Profiles" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1916 Use after free in Profiles" +✅ Updated CVE-2025-1916 in master table +â³ Processing CVE-2025-1918... +🧪 Raw Title for CVE-2025-1918: { + "Value": "Chromium: CVE-2025-1918 Out of bounds read in PDFium" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1918 Out of bounds read in PDFium" +✅ Updated CVE-2025-1918 in master table +â³ Processing CVE-2025-1917... +🧪 Raw Title for CVE-2025-1917: { + "Value": "Chromium: CVE-2025-1917 Inappropriate Implementation in Browser UI" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1917 Inappropriate Implementation in Browser UI" +✅ Updated CVE-2025-1917 in master table +â³ Processing CVE-2025-1921... +🧪 Raw Title for CVE-2025-1921: { + "Value": "Chromium: CVE-2025-1921 Inappropriate Implementation in Media Stream" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1921 Inappropriate Implementation in Media Stream" +✅ Updated CVE-2025-1921 in master table +â³ Processing CVE-2025-1915... +🧪 Raw Title for CVE-2025-1915: { + "Value": "Chromium: CVE-2025-1915 Improper Limitation of a Pathname to a Restricted Directory in DevTools" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1915 Improper Limitation of a Pathname to a Restricted Directory in DevTools" +✅ Updated CVE-2025-1915 in master table +â³ Processing CVE-2025-1923... +🧪 Raw Title for CVE-2025-1923: { + "Value": "Chromium: CVE-2025-1923 Inappropriate Implementation in Permission Prompts" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1923 Inappropriate Implementation in Permission Prompts" +✅ Updated CVE-2025-1923 in master table +â³ Processing CVE-2025-1922... +🧪 Raw Title for CVE-2025-1922: { + "Value": "Chromium: CVE-2025-1922 Inappropriate Implementation in Selection" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1922 Inappropriate Implementation in Selection" +✅ Updated CVE-2025-1922 in master table +â³ Processing CVE-2025-1914... +🧪 Raw Title for CVE-2025-1914: { + "Value": "Chromium: CVE-2025-1914 Out of bounds read in V8" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1914 Out of bounds read in V8" +✅ Updated CVE-2025-1914 in master table +â³ Processing CVE-2025-2135... +🧪 Raw Title for CVE-2025-2135: { + "Value": "Chromium: CVE-2025-2135 Type Confusion in V8" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-2135 Type Confusion in V8" +✅ Updated CVE-2025-2135 in master table +â³ Processing CVE-2025-1920... +🧪 Raw Title for CVE-2025-1920: { + "Value": "Chromium: CVE-2025-1920 Type Confusion in V8" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-1920 Type Confusion in V8" +✅ Updated CVE-2025-1920 in master table +â³ Processing CVE-2025-29807... +🧪 Raw Title for CVE-2025-29807: { + "Value": "Microsoft Dataverse Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Dataverse Remote Code Execution Vulnerability" +✅ Updated CVE-2025-29807 in master table +â³ Processing CVE-2025-29814... +🧪 Raw Title for CVE-2025-29814: { + "Value": "Microsoft Partner Center Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Partner Center Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-29814 in master table +â³ Processing CVE-2025-2476... +🧪 Raw Title for CVE-2025-2476: { + "Value": "Chromium: CVE-2025-2476 Use after free in Lens" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-2476 Use after free in Lens" +✅ Updated CVE-2025-2476 in master table +â³ Processing CVE-2025-26683... +🧪 Raw Title for CVE-2025-26683: { + "Value": "Azure Playwright Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Azure Playwright Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-26683 in master table +â³ Processing CVE-2025-21384... +🧪 Raw Title for CVE-2025-21384: { + "Value": "Azure Health Bot Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Azure Health Bot Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-21384 in master table +â³ Processing CVE-2025-21247... +🧪 Raw Title for CVE-2025-21247: { + "Value": "MapUrlToZone Security Feature Bypass Vulnerability" +} +âž¡ï¸ Parsed Title: "MapUrlToZone Security Feature Bypass Vulnerability" +✅ Updated CVE-2025-21247 in master table +â³ Processing CVE-2025-21199... +🧪 Raw Title for CVE-2025-21199: { + "Value": "Azure Agent Installer for Backup and Site Recovery Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Azure Agent Installer for Backup and Site Recovery Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-21199 in master table +â³ Processing CVE-2025-24045... +🧪 Raw Title for CVE-2025-24045: { + "Value": "Windows Remote Desktop Services Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Remote Desktop Services Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24045 in master table +â³ Processing CVE-2025-24046... +🧪 Raw Title for CVE-2025-24046: { + "Value": "Kernel Streaming Service Driver Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Kernel Streaming Service Driver Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24046 in master table +â³ Processing CVE-2025-24048... +🧪 Raw Title for CVE-2025-24048: { + "Value": "Windows Hyper-V Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Hyper-V Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24048 in master table +â³ Processing CVE-2025-24050... +🧪 Raw Title for CVE-2025-24050: { + "Value": "Windows Hyper-V Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Hyper-V Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24050 in master table +â³ Processing CVE-2025-24051... +🧪 Raw Title for CVE-2025-24051: { + "Value": "Windows Routing and Remote Access Service (RRAS) Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Routing and Remote Access Service (RRAS) Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24051 in master table +â³ Processing CVE-2025-24054... +🧪 Raw Title for CVE-2025-24054: { + "Value": "NTLM Hash Disclosure Spoofing Vulnerability" +} +âž¡ï¸ Parsed Title: "NTLM Hash Disclosure Spoofing Vulnerability" +✅ Updated CVE-2025-24054 in master table +â³ Processing CVE-2025-24055... +🧪 Raw Title for CVE-2025-24055: { + "Value": "Windows USB Video Class System Driver Information Disclosure Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows USB Video Class System Driver Information Disclosure Vulnerability" +✅ Updated CVE-2025-24055 in master table +â³ Processing CVE-2025-24056... +🧪 Raw Title for CVE-2025-24056: { + "Value": "Windows Telephony Service Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Telephony Service Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24056 in master table +â³ Processing CVE-2025-24059... +🧪 Raw Title for CVE-2025-24059: { + "Value": "Windows Common Log File System Driver Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Common Log File System Driver Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24059 in master table +â³ Processing CVE-2025-24061... +🧪 Raw Title for CVE-2025-24061: { + "Value": "Windows Mark of the Web Security Feature Bypass Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Mark of the Web Security Feature Bypass Vulnerability" +✅ Updated CVE-2025-24061 in master table +â³ Processing CVE-2025-24064... +🧪 Raw Title for CVE-2025-24064: { + "Value": "Windows Domain Name Service Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Domain Name Service Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24064 in master table +â³ Processing CVE-2025-24066... +🧪 Raw Title for CVE-2025-24066: { + "Value": "Kernel Streaming Service Driver Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Kernel Streaming Service Driver Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24066 in master table +â³ Processing CVE-2025-24067... +🧪 Raw Title for CVE-2025-24067: { + "Value": "Kernel Streaming Service Driver Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Kernel Streaming Service Driver Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24067 in master table +â³ Processing CVE-2025-24072... +🧪 Raw Title for CVE-2025-24072: { + "Value": "Microsoft Local Security Authority (LSA) Server Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Local Security Authority (LSA) Server Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24072 in master table +â³ Processing CVE-2025-24075... +🧪 Raw Title for CVE-2025-24075: { + "Value": "Microsoft Excel Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Excel Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24075 in master table +â³ Processing CVE-2025-24076... +🧪 Raw Title for CVE-2025-24076: { + "Value": "Microsoft Windows Cross Device Service Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Windows Cross Device Service Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24076 in master table +â³ Processing CVE-2025-24084... +🧪 Raw Title for CVE-2025-24084: { + "Value": "Windows Subsystem for Linux (WSL2) Kernel Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Subsystem for Linux (WSL2) Kernel Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24084 in master table +â³ Processing CVE-2025-24983... +🧪 Raw Title for CVE-2025-24983: { + "Value": "Windows Win32 Kernel Subsystem Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Win32 Kernel Subsystem Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24983 in master table +â³ Processing CVE-2025-24984... +🧪 Raw Title for CVE-2025-24984: { + "Value": "Windows NTFS Information Disclosure Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows NTFS Information Disclosure Vulnerability" +✅ Updated CVE-2025-24984 in master table +â³ Processing CVE-2025-24985... +🧪 Raw Title for CVE-2025-24985: { + "Value": "Windows Fast FAT File System Driver Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows Fast FAT File System Driver Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24985 in master table +â³ Processing CVE-2025-24991... +🧪 Raw Title for CVE-2025-24991: { + "Value": "Windows NTFS Information Disclosure Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows NTFS Information Disclosure Vulnerability" +✅ Updated CVE-2025-24991 in master table +â³ Processing CVE-2025-24992... +🧪 Raw Title for CVE-2025-24992: { + "Value": "Windows NTFS Information Disclosure Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows NTFS Information Disclosure Vulnerability" +✅ Updated CVE-2025-24992 in master table +â³ Processing CVE-2025-24993... +🧪 Raw Title for CVE-2025-24993: { + "Value": "Windows NTFS Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Windows NTFS Remote Code Execution Vulnerability" +✅ Updated CVE-2025-24993 in master table +â³ Processing CVE-2025-24994... +🧪 Raw Title for CVE-2025-24994: { + "Value": "Microsoft Windows Cross Device Service Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Windows Cross Device Service Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24994 in master table +â³ Processing CVE-2025-24049... +🧪 Raw Title for CVE-2025-24049: { + "Value": "Azure Command Line Integration (CLI) Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Azure Command Line Integration (CLI) Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24049 in master table +â³ Processing CVE-2025-26627... +🧪 Raw Title for CVE-2025-26627: { + "Value": "Azure Arc Installer Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Azure Arc Installer Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-26627 in master table +â³ Processing CVE-2025-26629... +🧪 Raw Title for CVE-2025-26629: { + "Value": "Microsoft Office Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Office Remote Code Execution Vulnerability" +✅ Updated CVE-2025-26629 in master table +â³ Processing CVE-2025-26630... +🧪 Raw Title for CVE-2025-26630: { + "Value": "Microsoft Access Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Access Remote Code Execution Vulnerability" +✅ Updated CVE-2025-26630 in master table +â³ Processing CVE-2025-26631... +🧪 Raw Title for CVE-2025-26631: { + "Value": "Visual Studio Code Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Visual Studio Code Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-26631 in master table +â³ Processing CVE-2025-26633... +🧪 Raw Title for CVE-2025-26633: { + "Value": "Microsoft Management Console Security Feature Bypass Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Management Console Security Feature Bypass Vulnerability" +✅ Updated CVE-2025-26633 in master table +â³ Processing CVE-2025-26643... +🧪 Raw Title for CVE-2025-26643: { + "Value": "Microsoft Edge (Chromium-based) Spoofing Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Edge (Chromium-based) Spoofing Vulnerability" +✅ Updated CVE-2025-26643 in master table +â³ Processing CVE-2025-26645... +🧪 Raw Title for CVE-2025-26645: { + "Value": "Remote Desktop Client Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Remote Desktop Client Remote Code Execution Vulnerability" +✅ Updated CVE-2025-26645 in master table +â³ Processing CVE-2025-2137... +🧪 Raw Title for CVE-2025-2137: { + "Value": "Chromium: CVE-2025-2137 Out of bounds read in V8" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-2137 Out of bounds read in V8" +✅ Updated CVE-2025-2137 in master table +â³ Processing CVE-2025-2136... +🧪 Raw Title for CVE-2025-2136: { + "Value": "Chromium: CVE-2025-2136 Use after free in Inspector" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-2136 Use after free in Inspector" +✅ Updated CVE-2025-2136 in master table +â³ Processing CVE-2025-24201... +🧪 Raw Title for CVE-2025-24201: { + "Value": "Chromium: CVE-2025-24201 Out of bounds write in GPU on Mac" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-24201 Out of bounds write in GPU on Mac" +✅ Updated CVE-2025-24201 in master table +â³ Processing CVE-2025-1097... +🧪 Raw Title for CVE-2025-1097: { + "Value": "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +} +âž¡ï¸ Parsed Title: "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +✅ Updated CVE-2025-1097 in master table +â³ Processing CVE-2025-1098... +🧪 Raw Title for CVE-2025-1098: { + "Value": "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +} +âž¡ï¸ Parsed Title: "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +✅ Updated CVE-2025-1098 in master table +â³ Processing CVE-2025-1974... +🧪 Raw Title for CVE-2025-1974: { + "Value": "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +} +âž¡ï¸ Parsed Title: "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +✅ Updated CVE-2025-1974 in master table +â³ Processing CVE-2025-24514... +🧪 Raw Title for CVE-2025-24514: { + "Value": "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +} +âž¡ï¸ Parsed Title: "Kubernetes: Vulnerability in Kubernetes NGINX Ingress Controller" +✅ Updated CVE-2025-24514 in master table +â³ Processing CVE-2025-24053... +🧪 Raw Title for CVE-2025-24053: { + "Value": "Microsoft Dataverse Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Dataverse Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-24053 in master table +â³ Processing CVE-2025-29795... +🧪 Raw Title for CVE-2025-29795: { + "Value": "Microsoft Edge (Chromium-based) Update Elevation of Privilege Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Edge (Chromium-based) Update Elevation of Privilege Vulnerability" +✅ Updated CVE-2025-29795 in master table +â³ Processing CVE-2025-2783... +🧪 Raw Title for CVE-2025-2783: { + "Value": "Chromium: CVE-2025-2783 Incorrect handle provided in unspecified circumstances in Mojo on Windows" +} +âž¡ï¸ Parsed Title: "Chromium: CVE-2025-2783 Incorrect handle provided in unspecified circumstances in Mojo on Windows" +✅ Updated CVE-2025-2783 in master table +â³ Processing CVE-2021-3672... +🧪 Raw Title for CVE-2021-3672: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2021-3672 in master table +â³ Processing CVE-2021-23336... +🧪 Raw Title for CVE-2021-23336: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2021-23336 in master table +â³ Processing CVE-2023-40548... +🧪 Raw Title for CVE-2023-40548: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-40548 in master table +â³ Processing CVE-2023-40550... +🧪 Raw Title for CVE-2023-40550: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-40550 in master table +â³ Processing CVE-2020-27840... +🧪 Raw Title for CVE-2020-27840: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2020-27840 in master table +â³ Processing CVE-2024-5288... +🧪 Raw Title for CVE-2024-5288: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-5288 in master table +â³ Processing CVE-2024-6104... +🧪 Raw Title for CVE-2024-6104: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-6104 in master table +â³ Processing CVE-2023-45288... +🧪 Raw Title for CVE-2023-45288: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-45288 in master table +â³ Processing CVE-2019-20907... +🧪 Raw Title for CVE-2019-20907: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2019-20907 in master table +â³ Processing CVE-2019-9674... +🧪 Raw Title for CVE-2019-9674: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2019-9674 in master table +â³ Processing CVE-2012-2677... +🧪 Raw Title for CVE-2012-2677: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2012-2677 in master table +â³ Processing CVE-2012-6708... +🧪 Raw Title for CVE-2012-6708: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2012-6708 in master table +â³ Processing CVE-2024-52338... +🧪 Raw Title for CVE-2024-52338: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-52338 in master table +â³ Processing CVE-2024-34062... +🧪 Raw Title for CVE-2024-34062: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-34062 in master table +â³ Processing CVE-2024-32020... +🧪 Raw Title for CVE-2024-32020: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-32020 in master table +â³ Processing CVE-2024-7383... +🧪 Raw Title for CVE-2024-7383: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-7383 in master table +â³ Processing CVE-2022-40898... +🧪 Raw Title for CVE-2022-40898: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-40898 in master table +â³ Processing CVE-2019-14584... +🧪 Raw Title for CVE-2019-14584: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2019-14584 in master table +â³ Processing CVE-2022-32746... +🧪 Raw Title for CVE-2022-32746: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-32746 in master table +â³ Processing CVE-2021-20277... +🧪 Raw Title for CVE-2021-20277: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2021-20277 in master table +â³ Processing CVE-2019-3816... +🧪 Raw Title for CVE-2019-3816: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2019-3816 in master table +â³ Processing CVE-2025-26466... +🧪 Raw Title for CVE-2025-26466: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26466 in master table +â³ Processing CVE-2024-50608... +🧪 Raw Title for CVE-2024-50608: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-50608 in master table +â³ Processing CVE-2025-26618... +🧪 Raw Title for CVE-2025-26618: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26618 in master table +â³ Processing CVE-2024-1454... +🧪 Raw Title for CVE-2024-1454: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-1454 in master table +â³ Processing CVE-2024-9681... +🧪 Raw Title for CVE-2024-9681: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-9681 in master table +â³ Processing CVE-2025-27144... +🧪 Raw Title for CVE-2025-27144: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27144 in master table +â³ Processing CVE-2024-50609... +🧪 Raw Title for CVE-2024-50609: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-50609 in master table +â³ Processing CVE-2023-52917... +🧪 Raw Title for CVE-2023-52917: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-52917 in master table +â³ Processing CVE-2021-36373... +🧪 Raw Title for CVE-2021-36373: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2021-36373 in master table +â³ Processing CVE-2021-36374... +🧪 Raw Title for CVE-2021-36374: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2021-36374 in master table +â³ Processing CVE-2023-40660... +🧪 Raw Title for CVE-2023-40660: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-40660 in master table +â³ Processing CVE-2024-50181... +🧪 Raw Title for CVE-2024-50181: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-50181 in master table +â³ Processing CVE-2024-56741... +🧪 Raw Title for CVE-2024-56741: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56741 in master table +â³ Processing CVE-2024-39908... +🧪 Raw Title for CVE-2024-39908: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-39908 in master table +â³ Processing CVE-2025-0840... +🧪 Raw Title for CVE-2025-0840: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-0840 in master table +â³ Processing CVE-2024-26973... +🧪 Raw Title for CVE-2024-26973: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-26973 in master table +â³ Processing CVE-2024-53150... +🧪 Raw Title for CVE-2024-53150: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53150 in master table +â³ Processing CVE-2024-53151... +🧪 Raw Title for CVE-2024-53151: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53151 in master table +â³ Processing CVE-2024-53215... +🧪 Raw Title for CVE-2024-53215: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53215 in master table +â³ Processing CVE-2024-53180... +🧪 Raw Title for CVE-2024-53180: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53180 in master table +â³ Processing CVE-2024-56568... +🧪 Raw Title for CVE-2024-56568: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56568 in master table +â³ Processing CVE-2024-56567... +🧪 Raw Title for CVE-2024-56567: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56567 in master table +â³ Processing CVE-2024-56598... +🧪 Raw Title for CVE-2024-56598: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56598 in master table +â³ Processing CVE-2024-56634... +🧪 Raw Title for CVE-2024-56634: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56634 in master table +â³ Processing CVE-2024-56640... +🧪 Raw Title for CVE-2024-56640: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56640 in master table +â³ Processing CVE-2024-56720... +🧪 Raw Title for CVE-2024-56720: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56720 in master table +â³ Processing CVE-2024-56754... +🧪 Raw Title for CVE-2024-56754: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56754 in master table +â³ Processing CVE-2024-57802... +🧪 Raw Title for CVE-2024-57802: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57802 in master table +â³ Processing CVE-2024-57807... +🧪 Raw Title for CVE-2024-57807: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57807 in master table +â³ Processing CVE-2024-57900... +🧪 Raw Title for CVE-2024-57900: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57900 in master table +â³ Processing CVE-2024-57938... +🧪 Raw Title for CVE-2024-57938: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57938 in master table +â³ Processing CVE-2024-45828... +🧪 Raw Title for CVE-2024-45828: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-45828 in master table +â³ Processing CVE-2024-47143... +🧪 Raw Title for CVE-2024-47143: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-47143 in master table +â³ Processing CVE-2024-53161... +🧪 Raw Title for CVE-2024-53161: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53161 in master table +â³ Processing CVE-2024-53155... +🧪 Raw Title for CVE-2024-53155: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53155 in master table +â³ Processing CVE-2024-55916... +🧪 Raw Title for CVE-2024-55916: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-55916 in master table +â³ Processing CVE-2024-56548... +🧪 Raw Title for CVE-2024-56548: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56548 in master table +â³ Processing CVE-2024-56600... +🧪 Raw Title for CVE-2024-56600: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56600 in master table +â³ Processing CVE-2024-56626... +🧪 Raw Title for CVE-2024-56626: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56626 in master table +â³ Processing CVE-2024-56627... +🧪 Raw Title for CVE-2024-56627: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56627 in master table +â³ Processing CVE-2024-56662... +🧪 Raw Title for CVE-2024-56662: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56662 in master table +â³ Processing CVE-2024-56659... +🧪 Raw Title for CVE-2024-56659: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56659 in master table +â³ Processing CVE-2024-56724... +🧪 Raw Title for CVE-2024-56724: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56724 in master table +â³ Processing CVE-2024-56728... +🧪 Raw Title for CVE-2024-56728: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56728 in master table +â³ Processing CVE-2024-56774... +🧪 Raw Title for CVE-2024-56774: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56774 in master table +â³ Processing CVE-2024-56777... +🧪 Raw Title for CVE-2024-56777: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56777 in master table +â³ Processing CVE-2024-57901... +🧪 Raw Title for CVE-2024-57901: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57901 in master table +â³ Processing CVE-2025-26596... +🧪 Raw Title for CVE-2025-26596: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26596 in master table +â³ Processing CVE-2025-26594... +🧪 Raw Title for CVE-2025-26594: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26594 in master table +â³ Processing CVE-2025-26595... +🧪 Raw Title for CVE-2025-26595: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26595 in master table +â³ Processing CVE-2025-26598... +🧪 Raw Title for CVE-2025-26598: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26598 in master table +â³ Processing CVE-2025-22134... +🧪 Raw Title for CVE-2025-22134: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-22134 in master table +â³ Processing CVE-2022-41862... +🧪 Raw Title for CVE-2022-41862: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-41862 in master table +â³ Processing CVE-2024-53859... +🧪 Raw Title for CVE-2024-53859: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53859 in master table +â³ Processing CVE-2024-36620... +🧪 Raw Title for CVE-2024-36620: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-36620 in master table +â³ Processing CVE-2024-10963... +🧪 Raw Title for CVE-2024-10963: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-10963 in master table +â³ Processing CVE-2023-40551... +🧪 Raw Title for CVE-2023-40551: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-40551 in master table +â³ Processing CVE-2024-56657... +🧪 Raw Title for CVE-2024-56657: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56657 in master table +â³ Processing CVE-2024-56763... +🧪 Raw Title for CVE-2024-56763: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56763 in master table +â³ Processing CVE-2024-57892... +🧪 Raw Title for CVE-2024-57892: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57892 in master table +â³ Processing CVE-2024-57980... +🧪 Raw Title for CVE-2024-57980: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57980 in master table +â³ Processing CVE-2025-21637... +🧪 Raw Title for CVE-2025-21637: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21637 in master table +â³ Processing CVE-2025-21718... +🧪 Raw Title for CVE-2025-21718: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21718 in master table +â³ Processing CVE-2024-3651... +🧪 Raw Title for CVE-2024-3651: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-3651 in master table +â³ Processing CVE-2015-2158... +🧪 Raw Title for CVE-2015-2158: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2015-2158 in master table +â³ Processing CVE-2020-14152... +🧪 Raw Title for CVE-2020-14152: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2020-14152 in master table +â³ Processing CVE-2024-56658... +🧪 Raw Title for CVE-2024-56658: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56658 in master table +â³ Processing CVE-2024-56710... +🧪 Raw Title for CVE-2024-56710: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56710 in master table +â³ Processing CVE-2024-57912... +🧪 Raw Title for CVE-2024-57912: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57912 in master table +â³ Processing CVE-2024-57978... +🧪 Raw Title for CVE-2024-57978: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57978 in master table +â³ Processing CVE-2025-21638... +🧪 Raw Title for CVE-2025-21638: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21638 in master table +â³ Processing CVE-2025-21680... +🧪 Raw Title for CVE-2025-21680: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21680 in master table +â³ Processing CVE-2025-21716... +🧪 Raw Title for CVE-2025-21716: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21716 in master table +â³ Processing CVE-2024-29195... +🧪 Raw Title for CVE-2024-29195: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-29195 in master table +â³ Processing CVE-2022-3162... +🧪 Raw Title for CVE-2022-3162: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-3162 in master table +â³ Processing CVE-2025-27219... +🧪 Raw Title for CVE-2025-27219: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27219 in master table +â³ Processing CVE-2025-27221... +🧪 Raw Title for CVE-2025-27221: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27221 in master table +â³ Processing CVE-2025-27220... +🧪 Raw Title for CVE-2025-27220: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27220 in master table +â³ Processing CVE-2024-1013... +🧪 Raw Title for CVE-2024-1013: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-1013 in master table +â³ Processing CVE-2024-8176... +🧪 Raw Title for CVE-2024-8176: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-8176 in master table +â³ Processing CVE-2024-8096... +🧪 Raw Title for CVE-2024-8096: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-8096 in master table +â³ Processing CVE-2025-22870... +🧪 Raw Title for CVE-2025-22870: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-22870 in master table +â³ Processing CVE-2024-33600... +🧪 Raw Title for CVE-2024-33600: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-33600 in master table +â³ Processing CVE-2024-33599... +🧪 Raw Title for CVE-2024-33599: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-33599 in master table +â³ Processing CVE-2025-21490... +🧪 Raw Title for CVE-2025-21490: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21490 in master table +â³ Processing CVE-2024-34397... +🧪 Raw Title for CVE-2024-34397: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-34397 in master table +â³ Processing CVE-2024-43806... +🧪 Raw Title for CVE-2024-43806: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-43806 in master table +â³ Processing CVE-2023-29942... +🧪 Raw Title for CVE-2023-29942: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-29942 in master table +â³ Processing CVE-2025-29786... +🧪 Raw Title for CVE-2025-29786: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-29786 in master table +â³ Processing CVE-2023-29935... +🧪 Raw Title for CVE-2023-29935: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-29935 in master table +â³ Processing CVE-2024-2511... +🧪 Raw Title for CVE-2024-2511: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-2511 in master table +â³ Processing CVE-2025-30348... +🧪 Raw Title for CVE-2025-30348: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-30348 in master table +â³ Processing CVE-2022-45142... +🧪 Raw Title for CVE-2022-45142: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-45142 in master table +â³ Processing CVE-2024-31580... +🧪 Raw Title for CVE-2024-31580: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-31580 in master table +â³ Processing CVE-2024-52006... +🧪 Raw Title for CVE-2024-52006: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-52006 in master table +â³ Processing CVE-2024-50349... +🧪 Raw Title for CVE-2024-50349: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-50349 in master table +â³ Processing CVE-2022-28737... +🧪 Raw Title for CVE-2022-28737: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-28737 in master table +â³ Processing CVE-2024-3727... +🧪 Raw Title for CVE-2024-3727: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-3727 in master table +â³ Processing CVE-2022-32149... +🧪 Raw Title for CVE-2022-32149: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-32149 in master table +â³ Processing CVE-2024-45338... +🧪 Raw Title for CVE-2024-45338: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-45338 in master table +â³ Processing CVE-2017-18207... +🧪 Raw Title for CVE-2017-18207: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2017-18207 in master table +â³ Processing CVE-2017-17522... +🧪 Raw Title for CVE-2017-17522: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2017-17522 in master table +â³ Processing CVE-2007-4559... +🧪 Raw Title for CVE-2007-4559: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2007-4559 in master table +â³ Processing CVE-2025-1176... +🧪 Raw Title for CVE-2025-1176: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1176 in master table +â³ Processing CVE-2025-1182... +🧪 Raw Title for CVE-2025-1182: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1182 in master table +â³ Processing CVE-2025-1181... +🧪 Raw Title for CVE-2025-1181: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1181 in master table +â³ Processing CVE-2025-1178... +🧪 Raw Title for CVE-2025-1178: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1178 in master table +â³ Processing CVE-2015-9251... +🧪 Raw Title for CVE-2015-9251: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2015-9251 in master table +â³ Processing CVE-2020-22217... +🧪 Raw Title for CVE-2020-22217: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2020-22217 in master table +â³ Processing CVE-2021-24032... +🧪 Raw Title for CVE-2021-24032: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2021-24032 in master table +â³ Processing CVE-2024-25629... +🧪 Raw Title for CVE-2024-25629: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-25629 in master table +â³ Processing CVE-2024-32465... +🧪 Raw Title for CVE-2024-32465: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-32465 in master table +â³ Processing CVE-2021-20286... +🧪 Raw Title for CVE-2021-20286: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2021-20286 in master table +â³ Processing CVE-2024-32021... +🧪 Raw Title for CVE-2024-32021: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-32021 in master table +â³ Processing CVE-2023-40549... +🧪 Raw Title for CVE-2023-40549: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-40549 in master table +â³ Processing CVE-2023-40546... +🧪 Raw Title for CVE-2023-40546: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-40546 in master table +â³ Processing CVE-2024-37535... +🧪 Raw Title for CVE-2024-37535: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-37535 in master table +â³ Processing CVE-2023-1393... +🧪 Raw Title for CVE-2023-1393: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-1393 in master table +â³ Processing CVE-2019-3833... +🧪 Raw Title for CVE-2019-3833: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2019-3833 in master table +â³ Processing CVE-2024-12133... +🧪 Raw Title for CVE-2024-12133: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-12133 in master table +â³ Processing CVE-2024-26943... +🧪 Raw Title for CVE-2024-26943: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-26943 in master table +â³ Processing CVE-2024-27026... +🧪 Raw Title for CVE-2024-27026: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-27026 in master table +â³ Processing CVE-2024-35790... +🧪 Raw Title for CVE-2024-35790: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-35790 in master table +â³ Processing CVE-2024-35792... +🧪 Raw Title for CVE-2024-35792: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-35792 in master table +â³ Processing CVE-2024-27061... +🧪 Raw Title for CVE-2024-27061: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-27061 in master table +â³ Processing CVE-2024-40982... +🧪 Raw Title for CVE-2024-40982: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-40982 in master table +â³ Processing CVE-2024-43098... +🧪 Raw Title for CVE-2024-43098: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-43098 in master table +â³ Processing CVE-2024-53146... +🧪 Raw Title for CVE-2024-53146: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53146 in master table +â³ Processing CVE-2025-22868... +🧪 Raw Title for CVE-2025-22868: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-22868 in master table +â³ Processing CVE-2024-53157... +🧪 Raw Title for CVE-2024-53157: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53157 in master table +â³ Processing CVE-2024-53156... +🧪 Raw Title for CVE-2024-53156: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53156 in master table +â³ Processing CVE-2024-53165... +🧪 Raw Title for CVE-2024-53165: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53165 in master table +â³ Processing CVE-2024-53171... +🧪 Raw Title for CVE-2024-53171: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53171 in master table +â³ Processing CVE-2024-56369... +🧪 Raw Title for CVE-2024-56369: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56369 in master table +â³ Processing CVE-2024-53227... +🧪 Raw Title for CVE-2024-53227: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53227 in master table +â³ Processing CVE-2024-53237... +🧪 Raw Title for CVE-2024-53237: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53237 in master table +â³ Processing CVE-2024-53217... +🧪 Raw Title for CVE-2024-53217: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53217 in master table +â³ Processing CVE-2024-56569... +🧪 Raw Title for CVE-2024-56569: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56569 in master table +â³ Processing CVE-2024-56572... +🧪 Raw Title for CVE-2024-56572: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56572 in master table +â³ Processing CVE-2024-56578... +🧪 Raw Title for CVE-2024-56578: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56578 in master table +â³ Processing CVE-2024-56574... +🧪 Raw Title for CVE-2024-56574: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56574 in master table +â³ Processing CVE-2024-56593... +🧪 Raw Title for CVE-2024-56593: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56593 in master table +â³ Processing CVE-2024-56622... +🧪 Raw Title for CVE-2024-56622: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56622 in master table +â³ Processing CVE-2024-56606... +🧪 Raw Title for CVE-2024-56606: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56606 in master table +â³ Processing CVE-2024-56601... +🧪 Raw Title for CVE-2024-56601: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56601 in master table +â³ Processing CVE-2024-56602... +🧪 Raw Title for CVE-2024-56602: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56602 in master table +â³ Processing CVE-2024-56698... +🧪 Raw Title for CVE-2024-56698: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56698 in master table +â³ Processing CVE-2024-56704... +🧪 Raw Title for CVE-2024-56704: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56704 in master table +â³ Processing CVE-2024-56715... +🧪 Raw Title for CVE-2024-56715: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56715 in master table +â³ Processing CVE-2024-56642... +🧪 Raw Title for CVE-2024-56642: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56642 in master table +â³ Processing CVE-2024-56716... +🧪 Raw Title for CVE-2024-56716: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56716 in master table +â³ Processing CVE-2024-56726... +🧪 Raw Title for CVE-2024-56726: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56726 in master table +â³ Processing CVE-2024-56746... +🧪 Raw Title for CVE-2024-56746: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56746 in master table +â³ Processing CVE-2024-56723... +🧪 Raw Title for CVE-2024-56723: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56723 in master table +â³ Processing CVE-2024-56739... +🧪 Raw Title for CVE-2024-56739: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56739 in master table +â³ Processing CVE-2024-56748... +🧪 Raw Title for CVE-2024-56748: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56748 in master table +â³ Processing CVE-2024-56776... +🧪 Raw Title for CVE-2024-56776: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56776 in master table +â³ Processing CVE-2024-56779... +🧪 Raw Title for CVE-2024-56779: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56779 in master table +â³ Processing CVE-2024-56778... +🧪 Raw Title for CVE-2024-56778: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56778 in master table +â³ Processing CVE-2024-56780... +🧪 Raw Title for CVE-2024-56780: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56780 in master table +â³ Processing CVE-2024-56785... +🧪 Raw Title for CVE-2024-56785: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56785 in master table +â³ Processing CVE-2024-57874... +🧪 Raw Title for CVE-2024-57874: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57874 in master table +â³ Processing CVE-2024-57896... +🧪 Raw Title for CVE-2024-57896: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57896 in master table +â³ Processing CVE-2024-57841... +🧪 Raw Title for CVE-2024-57841: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57841 in master table +â³ Processing CVE-2024-57890... +🧪 Raw Title for CVE-2024-57890: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57890 in master table +â³ Processing CVE-2024-36476... +🧪 Raw Title for CVE-2024-36476: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-36476 in master table +â³ Processing CVE-2024-57946... +🧪 Raw Title for CVE-2024-57946: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57946 in master table +â³ Processing CVE-2024-9287... +🧪 Raw Title for CVE-2024-9287: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-9287 in master table +â³ Processing CVE-2025-22869... +🧪 Raw Title for CVE-2025-22869: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-22869 in master table +â³ Processing CVE-2024-50051... +🧪 Raw Title for CVE-2024-50051: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-50051 in master table +â³ Processing CVE-2024-48881... +🧪 Raw Title for CVE-2024-48881: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-48881 in master table +â³ Processing CVE-2024-53145... +🧪 Raw Title for CVE-2024-53145: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53145 in master table +â³ Processing CVE-2024-53096... +🧪 Raw Title for CVE-2024-53096: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53096 in master table +â³ Processing CVE-2024-53206... +🧪 Raw Title for CVE-2024-53206: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53206 in master table +â³ Processing CVE-2024-53239... +🧪 Raw Title for CVE-2024-53239: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53239 in master table +â³ Processing CVE-2024-53173... +🧪 Raw Title for CVE-2024-53173: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53173 in master table +â³ Processing CVE-2024-53226... +🧪 Raw Title for CVE-2024-53226: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53226 in master table +â³ Processing CVE-2024-56575... +🧪 Raw Title for CVE-2024-56575: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56575 in master table +â³ Processing CVE-2024-56581... +🧪 Raw Title for CVE-2024-56581: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56581 in master table +â³ Processing CVE-2024-56595... +🧪 Raw Title for CVE-2024-56595: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56595 in master table +â³ Processing CVE-2024-56587... +🧪 Raw Title for CVE-2024-56587: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56587 in master table +â³ Processing CVE-2024-56596... +🧪 Raw Title for CVE-2024-56596: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56596 in master table +â³ Processing CVE-2024-56614... +🧪 Raw Title for CVE-2024-56614: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56614 in master table +â³ Processing CVE-2024-56605... +🧪 Raw Title for CVE-2024-56605: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56605 in master table +â³ Processing CVE-2024-56615... +🧪 Raw Title for CVE-2024-56615: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56615 in master table +â³ Processing CVE-2024-56603... +🧪 Raw Title for CVE-2024-56603: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56603 in master table +â³ Processing CVE-2024-56623... +🧪 Raw Title for CVE-2024-56623: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56623 in master table +â³ Processing CVE-2024-56643... +🧪 Raw Title for CVE-2024-56643: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56643 in master table +â³ Processing CVE-2024-56650... +🧪 Raw Title for CVE-2024-56650: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56650 in master table +â³ Processing CVE-2024-56648... +🧪 Raw Title for CVE-2024-56648: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56648 in master table +â³ Processing CVE-2024-56629... +🧪 Raw Title for CVE-2024-56629: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56629 in master table +â³ Processing CVE-2024-56670... +🧪 Raw Title for CVE-2024-56670: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56670 in master table +â³ Processing CVE-2024-56694... +🧪 Raw Title for CVE-2024-56694: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56694 in master table +â³ Processing CVE-2024-56688... +🧪 Raw Title for CVE-2024-56688: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56688 in master table +â³ Processing CVE-2024-56708... +🧪 Raw Title for CVE-2024-56708: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56708 in master table +â³ Processing CVE-2024-56747... +🧪 Raw Title for CVE-2024-56747: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56747 in master table +â³ Processing CVE-2024-56745... +🧪 Raw Title for CVE-2024-56745: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56745 in master table +â³ Processing CVE-2024-56756... +🧪 Raw Title for CVE-2024-56756: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56756 in master table +â³ Processing CVE-2024-56770... +🧪 Raw Title for CVE-2024-56770: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56770 in master table +â³ Processing CVE-2024-56781... +🧪 Raw Title for CVE-2024-56781: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56781 in master table +â³ Processing CVE-2024-56787... +🧪 Raw Title for CVE-2024-56787: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56787 in master table +â³ Processing CVE-2024-57850... +🧪 Raw Title for CVE-2024-57850: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57850 in master table +â³ Processing CVE-2024-57902... +🧪 Raw Title for CVE-2024-57902: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57902 in master table +â³ Processing CVE-2024-50302... +🧪 Raw Title for CVE-2024-50302: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-50302 in master table +â³ Processing CVE-2025-27516... +🧪 Raw Title for CVE-2025-27516: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27516 in master table +â³ Processing CVE-2025-26600... +🧪 Raw Title for CVE-2025-26600: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26600 in master table +â³ Processing CVE-2025-26597... +🧪 Raw Title for CVE-2025-26597: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26597 in master table +â³ Processing CVE-2025-1744... +🧪 Raw Title for CVE-2025-1744: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1744 in master table +â³ Processing CVE-2025-27423... +🧪 Raw Title for CVE-2025-27423: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27423 in master table +â³ Processing CVE-2025-26599... +🧪 Raw Title for CVE-2025-26599: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26599 in master table +â³ Processing CVE-2025-26601... +🧪 Raw Title for CVE-2025-26601: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26601 in master table +â³ Processing CVE-2024-43802... +🧪 Raw Title for CVE-2024-43802: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-43802 in master table +â³ Processing CVE-2024-45337... +🧪 Raw Title for CVE-2024-45337: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-45337 in master table +â³ Processing CVE-2024-36621... +🧪 Raw Title for CVE-2024-36621: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-36621 in master table +â³ Processing CVE-2024-36623... +🧪 Raw Title for CVE-2024-36623: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-36623 in master table +â³ Processing CVE-2023-6121... +🧪 Raw Title for CVE-2023-6121: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-6121 in master table +â³ Processing CVE-2023-6817... +🧪 Raw Title for CVE-2023-6817: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-6817 in master table +â³ Processing CVE-2023-2455... +🧪 Raw Title for CVE-2023-2455: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-2455 in master table +â³ Processing CVE-2025-0665... +🧪 Raw Title for CVE-2025-0665: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-0665 in master table +â³ Processing CVE-2025-0167... +🧪 Raw Title for CVE-2025-0167: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-0167 in master table +â³ Processing CVE-2024-11053... +🧪 Raw Title for CVE-2024-11053: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-11053 in master table +â³ Processing CVE-2025-0633... +🧪 Raw Title for CVE-2025-0633: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-0633 in master table +â³ Processing CVE-2023-48795... +🧪 Raw Title for CVE-2023-48795: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-48795 in master table +â³ Processing CVE-2024-6874... +🧪 Raw Title for CVE-2024-6874: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-6874 in master table +â³ Processing CVE-2024-47141... +🧪 Raw Title for CVE-2024-47141: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-47141 in master table +â³ Processing CVE-2024-48875... +🧪 Raw Title for CVE-2024-48875: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-48875 in master table +â³ Processing CVE-2024-54680... +🧪 Raw Title for CVE-2024-54680: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-54680 in master table +â³ Processing CVE-2024-56582... +🧪 Raw Title for CVE-2024-56582: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56582 in master table +â³ Processing CVE-2024-56613... +🧪 Raw Title for CVE-2024-56613: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56613 in master table +â³ Processing CVE-2024-56611... +🧪 Raw Title for CVE-2024-56611: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56611 in master table +â³ Processing CVE-2024-56617... +🧪 Raw Title for CVE-2024-56617: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56617 in master table +â³ Processing CVE-2024-56649... +🧪 Raw Title for CVE-2024-56649: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56649 in master table +â³ Processing CVE-2024-56653... +🧪 Raw Title for CVE-2024-56653: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56653 in master table +â³ Processing CVE-2024-56654... +🧪 Raw Title for CVE-2024-56654: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56654 in master table +â³ Processing CVE-2024-56655... +🧪 Raw Title for CVE-2024-56655: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56655 in master table +â³ Processing CVE-2024-56663... +🧪 Raw Title for CVE-2024-56663: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56663 in master table +â³ Processing CVE-2024-56667... +🧪 Raw Title for CVE-2024-56667: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56667 in master table +â³ Processing CVE-2024-56703... +🧪 Raw Title for CVE-2024-56703: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56703 in master table +â³ Processing CVE-2024-56718... +🧪 Raw Title for CVE-2024-56718: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56718 in master table +â³ Processing CVE-2024-56719... +🧪 Raw Title for CVE-2024-56719: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56719 in master table +â³ Processing CVE-2024-56767... +🧪 Raw Title for CVE-2024-56767: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56767 in master table +â³ Processing CVE-2024-56769... +🧪 Raw Title for CVE-2024-56769: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56769 in master table +â³ Processing CVE-2024-57801... +🧪 Raw Title for CVE-2024-57801: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57801 in master table +â³ Processing CVE-2024-57882... +🧪 Raw Title for CVE-2024-57882: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57882 in master table +â³ Processing CVE-2024-57887... +🧪 Raw Title for CVE-2024-57887: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57887 in master table +â³ Processing CVE-2024-57908... +🧪 Raw Title for CVE-2024-57908: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57908 in master table +â³ Processing CVE-2024-57922... +🧪 Raw Title for CVE-2024-57922: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57922 in master table +â³ Processing CVE-2024-57910... +🧪 Raw Title for CVE-2024-57910: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57910 in master table +â³ Processing CVE-2024-57916... +🧪 Raw Title for CVE-2024-57916: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57916 in master table +â³ Processing CVE-2024-57925... +🧪 Raw Title for CVE-2024-57925: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57925 in master table +â³ Processing CVE-2024-57933... +🧪 Raw Title for CVE-2024-57933: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57933 in master table +â³ Processing CVE-2024-57926... +🧪 Raw Title for CVE-2024-57926: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57926 in master table +â³ Processing CVE-2024-57939... +🧪 Raw Title for CVE-2024-57939: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57939 in master table +â³ Processing CVE-2024-57973... +🧪 Raw Title for CVE-2024-57973: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57973 in master table +â³ Processing CVE-2024-57981... +🧪 Raw Title for CVE-2024-57981: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57981 in master table +â³ Processing CVE-2024-57996... +🧪 Raw Title for CVE-2024-57996: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57996 in master table +â³ Processing CVE-2024-58007... +🧪 Raw Title for CVE-2024-58007: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-58007 in master table +â³ Processing CVE-2024-58017... +🧪 Raw Title for CVE-2024-58017: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-58017 in master table +â³ Processing CVE-2024-58011... +🧪 Raw Title for CVE-2024-58011: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-58011 in master table +â³ Processing CVE-2025-21640... +🧪 Raw Title for CVE-2025-21640: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21640 in master table +â³ Processing CVE-2025-21642... +🧪 Raw Title for CVE-2025-21642: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21642 in master table +â³ Processing CVE-2025-21652... +🧪 Raw Title for CVE-2025-21652: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21652 in master table +â³ Processing CVE-2025-21667... +🧪 Raw Title for CVE-2025-21667: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21667 in master table +â³ Processing CVE-2025-21658... +🧪 Raw Title for CVE-2025-21658: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21658 in master table +â³ Processing CVE-2025-21669... +🧪 Raw Title for CVE-2025-21669: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21669 in master table +â³ Processing CVE-2025-21670... +🧪 Raw Title for CVE-2025-21670: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21670 in master table +â³ Processing CVE-2025-21674... +🧪 Raw Title for CVE-2025-21674: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21674 in master table +â³ Processing CVE-2025-21675... +🧪 Raw Title for CVE-2025-21675: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21675 in master table +â³ Processing CVE-2025-21681... +🧪 Raw Title for CVE-2025-21681: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21681 in master table +â³ Processing CVE-2025-21683... +🧪 Raw Title for CVE-2025-21683: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21683 in master table +â³ Processing CVE-2025-21692... +🧪 Raw Title for CVE-2025-21692: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21692 in master table +â³ Processing CVE-2025-21697... +🧪 Raw Title for CVE-2025-21697: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21697 in master table +â³ Processing CVE-2025-21694... +🧪 Raw Title for CVE-2025-21694: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21694 in master table +â³ Processing CVE-2025-21707... +🧪 Raw Title for CVE-2025-21707: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21707 in master table +â³ Processing CVE-2025-21711... +🧪 Raw Title for CVE-2025-21711: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21711 in master table +â³ Processing CVE-2025-21743... +🧪 Raw Title for CVE-2025-21743: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21743 in master table +â³ Processing CVE-2025-21748... +🧪 Raw Title for CVE-2025-21748: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21748 in master table +â³ Processing CVE-2025-21749... +🧪 Raw Title for CVE-2025-21749: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21749 in master table +â³ Processing CVE-2025-21820... +🧪 Raw Title for CVE-2025-21820: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21820 in master table +â³ Processing CVE-2025-0426... +🧪 Raw Title for CVE-2025-0426: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-0426 in master table +â³ Processing CVE-2020-13435... +🧪 Raw Title for CVE-2020-13435: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2020-13435 in master table +â³ Processing CVE-2024-56171... +🧪 Raw Title for CVE-2024-56171: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56171 in master table +â³ Processing CVE-2025-24928... +🧪 Raw Title for CVE-2025-24928: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-24928 in master table +â³ Processing CVE-2025-27113... +🧪 Raw Title for CVE-2025-27113: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27113 in master table +â³ Processing CVE-2024-13176... +🧪 Raw Title for CVE-2024-13176: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-13176 in master table +â³ Processing CVE-2024-28757... +🧪 Raw Title for CVE-2024-28757: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-28757 in master table +â³ Processing CVE-2023-45803... +🧪 Raw Title for CVE-2023-45803: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-45803 in master table +â³ Processing CVE-2024-28180... +🧪 Raw Title for CVE-2024-28180: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-28180 in master table +â³ Processing CVE-2024-3219... +🧪 Raw Title for CVE-2024-3219: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-3219 in master table +â³ Processing CVE-2024-4032... +🧪 Raw Title for CVE-2024-4032: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-4032 in master table +â³ Processing CVE-2024-45490... +🧪 Raw Title for CVE-2024-45490: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-45490 in master table +â³ Processing CVE-2024-50602... +🧪 Raw Title for CVE-2024-50602: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-50602 in master table +â³ Processing CVE-2024-45492... +🧪 Raw Title for CVE-2024-45492: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-45492 in master table +â³ Processing CVE-2025-0938... +🧪 Raw Title for CVE-2025-0938: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-0938 in master table +â³ Processing CVE-2025-1215... +🧪 Raw Title for CVE-2025-1215: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1215 in master table +â³ Processing CVE-2025-26603... +🧪 Raw Title for CVE-2025-26603: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-26603 in master table +â³ Processing CVE-2019-25219... +🧪 Raw Title for CVE-2019-25219: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2019-25219 in master table +â³ Processing CVE-2023-52160... +🧪 Raw Title for CVE-2023-52160: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-52160 in master table +â³ Processing CVE-2024-24826... +🧪 Raw Title for CVE-2024-24826: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-24826 in master table +â³ Processing CVE-2024-25112... +🧪 Raw Title for CVE-2024-25112: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-25112 in master table +â³ Processing CVE-2016-10087... +🧪 Raw Title for CVE-2016-10087: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2016-10087 in master table +â³ Processing CVE-2016-9840... +🧪 Raw Title for CVE-2016-9840: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2016-9840 in master table +â³ Processing CVE-2016-9841... +🧪 Raw Title for CVE-2016-9841: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2016-9841 in master table +â³ Processing CVE-2016-9842... +🧪 Raw Title for CVE-2016-9842: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2016-9842 in master table +â³ Processing CVE-2016-9843... +🧪 Raw Title for CVE-2016-9843: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2016-9843 in master table +â³ Processing CVE-2023-6992... +🧪 Raw Title for CVE-2023-6992: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-6992 in master table +â³ Processing CVE-2023-25564... +🧪 Raw Title for CVE-2023-25564: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-25564 in master table +â³ Processing CVE-2023-25567... +🧪 Raw Title for CVE-2023-25567: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-25567 in master table +â³ Processing CVE-2023-25566... +🧪 Raw Title for CVE-2023-25566: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-25566 in master table +â³ Processing CVE-2004-2779... +🧪 Raw Title for CVE-2004-2779: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2004-2779 in master table +â³ Processing CVE-2024-36039... +🧪 Raw Title for CVE-2024-36039: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-36039 in master table +â³ Processing CVE-2024-49769... +🧪 Raw Title for CVE-2024-49769: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-49769 in master table +â³ Processing CVE-2024-34403... +🧪 Raw Title for CVE-2024-34403: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-34403 in master table +â³ Processing CVE-2024-51744... +🧪 Raw Title for CVE-2024-51744: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-51744 in master table +â³ Processing CVE-2024-7264... +🧪 Raw Title for CVE-2024-7264: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-7264 in master table +â³ Processing CVE-2023-3978... +🧪 Raw Title for CVE-2023-3978: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-3978 in master table +â³ Processing CVE-2025-0725... +🧪 Raw Title for CVE-2025-0725: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-0725 in master table +â³ Processing CVE-2024-10846... +🧪 Raw Title for CVE-2024-10846: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-10846 in master table +â³ Processing CVE-2024-47809... +🧪 Raw Title for CVE-2024-47809: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-47809 in master table +â³ Processing CVE-2025-25204... +🧪 Raw Title for CVE-2025-25204: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-25204 in master table +â³ Processing CVE-2024-48873... +🧪 Raw Title for CVE-2024-48873: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-48873 in master table +â³ Processing CVE-2024-53179... +🧪 Raw Title for CVE-2024-53179: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53179 in master table +â³ Processing CVE-2024-54683... +🧪 Raw Title for CVE-2024-54683: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-54683 in master table +â³ Processing CVE-2024-56631... +🧪 Raw Title for CVE-2024-56631: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56631 in master table +â³ Processing CVE-2024-56635... +🧪 Raw Title for CVE-2024-56635: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56635 in master table +â³ Processing CVE-2024-56604... +🧪 Raw Title for CVE-2024-56604: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56604 in master table +â³ Processing CVE-2024-56651... +🧪 Raw Title for CVE-2024-56651: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56651 in master table +â³ Processing CVE-2024-56660... +🧪 Raw Title for CVE-2024-56660: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56660 in master table +â³ Processing CVE-2024-56665... +🧪 Raw Title for CVE-2024-56665: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56665 in master table +â³ Processing CVE-2024-56664... +🧪 Raw Title for CVE-2024-56664: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56664 in master table +â³ Processing CVE-2024-56672... +🧪 Raw Title for CVE-2024-56672: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56672 in master table +â³ Processing CVE-2024-56675... +🧪 Raw Title for CVE-2024-56675: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56675 in master table +â³ Processing CVE-2024-56717... +🧪 Raw Title for CVE-2024-56717: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56717 in master table +â³ Processing CVE-2024-56760... +🧪 Raw Title for CVE-2024-56760: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56760 in master table +â³ Processing CVE-2024-56783... +🧪 Raw Title for CVE-2024-56783: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56783 in master table +â³ Processing CVE-2024-56765... +🧪 Raw Title for CVE-2024-56765: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56765 in master table +â³ Processing CVE-2024-56766... +🧪 Raw Title for CVE-2024-56766: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56766 in master table +â³ Processing CVE-2024-56786... +🧪 Raw Title for CVE-2024-56786: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-56786 in master table +â³ Processing CVE-2024-57798... +🧪 Raw Title for CVE-2024-57798: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57798 in master table +â³ Processing CVE-2024-57895... +🧪 Raw Title for CVE-2024-57895: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57895 in master table +â³ Processing CVE-2024-57906... +🧪 Raw Title for CVE-2024-57906: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57906 in master table +â³ Processing CVE-2024-57907... +🧪 Raw Title for CVE-2024-57907: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57907 in master table +â³ Processing CVE-2024-57911... +🧪 Raw Title for CVE-2024-57911: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57911 in master table +â³ Processing CVE-2024-57913... +🧪 Raw Title for CVE-2024-57913: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57913 in master table +â³ Processing CVE-2024-57940... +🧪 Raw Title for CVE-2024-57940: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57940 in master table +â³ Processing CVE-2024-57949... +🧪 Raw Title for CVE-2024-57949: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57949 in master table +â³ Processing CVE-2024-57951... +🧪 Raw Title for CVE-2024-57951: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57951 in master table +â³ Processing CVE-2024-57997... +🧪 Raw Title for CVE-2024-57997: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-57997 in master table +â³ Processing CVE-2024-58005... +🧪 Raw Title for CVE-2024-58005: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-58005 in master table +â³ Processing CVE-2024-58010... +🧪 Raw Title for CVE-2024-58010: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-58010 in master table +â³ Processing CVE-2025-21636... +🧪 Raw Title for CVE-2025-21636: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21636 in master table +â³ Processing CVE-2025-21631... +🧪 Raw Title for CVE-2025-21631: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21631 in master table +â³ Processing CVE-2025-21639... +🧪 Raw Title for CVE-2025-21639: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21639 in master table +â³ Processing CVE-2025-21666... +🧪 Raw Title for CVE-2025-21666: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21666 in master table +â³ Processing CVE-2025-21665... +🧪 Raw Title for CVE-2025-21665: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21665 in master table +â³ Processing CVE-2025-21673... +🧪 Raw Title for CVE-2025-21673: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21673 in master table +â³ Processing CVE-2025-21676... +🧪 Raw Title for CVE-2025-21676: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21676 in master table +â³ Processing CVE-2025-21684... +🧪 Raw Title for CVE-2025-21684: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21684 in master table +â³ Processing CVE-2025-21689... +🧪 Raw Title for CVE-2025-21689: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21689 in master table +â³ Processing CVE-2025-21687... +🧪 Raw Title for CVE-2025-21687: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21687 in master table +â³ Processing CVE-2025-21690... +🧪 Raw Title for CVE-2025-21690: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21690 in master table +â³ Processing CVE-2025-21699... +🧪 Raw Title for CVE-2025-21699: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21699 in master table +â³ Processing CVE-2025-21735... +🧪 Raw Title for CVE-2025-21735: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21735 in master table +â³ Processing CVE-2025-21736... +🧪 Raw Title for CVE-2025-21736: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21736 in master table +â³ Processing CVE-2025-21741... +🧪 Raw Title for CVE-2025-21741: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21741 in master table +â³ Processing CVE-2025-21742... +🧪 Raw Title for CVE-2025-21742: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21742 in master table +â³ Processing CVE-2025-21744... +🧪 Raw Title for CVE-2025-21744: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21744 in master table +â³ Processing CVE-2025-21745... +🧪 Raw Title for CVE-2025-21745: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21745 in master table +â³ Processing CVE-2025-21814... +🧪 Raw Title for CVE-2025-21814: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-21814 in master table +â³ Processing CVE-2025-1390... +🧪 Raw Title for CVE-2025-1390: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1390 in master table +â³ Processing CVE-2024-25062... +🧪 Raw Title for CVE-2024-25062: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-25062 in master table +â³ Processing CVE-2025-23359... +🧪 Raw Title for CVE-2025-23359: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-23359 in master table +â³ Processing CVE-2024-12797... +🧪 Raw Title for CVE-2024-12797: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-12797 in master table +â³ Processing CVE-2024-9143... +🧪 Raw Title for CVE-2024-9143: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-9143 in master table +â³ Processing CVE-2024-37891... +🧪 Raw Title for CVE-2024-37891: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-37891 in master table +â³ Processing CVE-2024-4030... +🧪 Raw Title for CVE-2024-4030: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-4030 in master table +â³ Processing CVE-2024-45491... +🧪 Raw Title for CVE-2024-45491: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-45491 in master table +â³ Processing CVE-2023-44398... +🧪 Raw Title for CVE-2023-44398: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-44398 in master table +â³ Processing CVE-2024-39695... +🧪 Raw Title for CVE-2024-39695: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-39695 in master table +â³ Processing CVE-2015-8126... +🧪 Raw Title for CVE-2015-8126: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2015-8126 in master table +â³ Processing CVE-2015-8472... +🧪 Raw Title for CVE-2015-8472: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2015-8472 in master table +â³ Processing CVE-2017-12652... +🧪 Raw Title for CVE-2017-12652: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2017-12652 in master table +â³ Processing CVE-2023-25563... +🧪 Raw Title for CVE-2023-25563: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-25563 in master table +â³ Processing CVE-2019-7317... +🧪 Raw Title for CVE-2019-7317: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2019-7317 in master table +â³ Processing CVE-2023-25565... +🧪 Raw Title for CVE-2023-25565: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-25565 in master table +â³ Processing CVE-2023-40305... +🧪 Raw Title for CVE-2023-40305: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-40305 in master table +â³ Processing CVE-2017-11550... +🧪 Raw Title for CVE-2017-11550: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2017-11550 in master table +â³ Processing CVE-2017-11551... +🧪 Raw Title for CVE-2017-11551: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2017-11551 in master table +â³ Processing CVE-2018-7263... +🧪 Raw Title for CVE-2018-7263: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2018-7263 in master table +â³ Processing CVE-2023-39976... +🧪 Raw Title for CVE-2023-39976: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-39976 in master table +â³ Processing CVE-2023-35789... +🧪 Raw Title for CVE-2023-35789: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-35789 in master table +â³ Processing CVE-2022-43357... +🧪 Raw Title for CVE-2022-43357: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-43357 in master table +â³ Processing CVE-2022-26592... +🧪 Raw Title for CVE-2022-26592: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-26592 in master table +â³ Processing CVE-2022-43358... +🧪 Raw Title for CVE-2022-43358: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-43358 in master table +â³ Processing CVE-2023-28370... +🧪 Raw Title for CVE-2023-28370: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-28370 in master table +â³ Processing CVE-2022-24761... +🧪 Raw Title for CVE-2022-24761: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-24761 in master table +â³ Processing CVE-2022-31015... +🧪 Raw Title for CVE-2022-31015: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-31015 in master table +â³ Processing CVE-2018-25032... +🧪 Raw Title for CVE-2018-25032: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2018-25032 in master table +â³ Processing CVE-2022-37434... +🧪 Raw Title for CVE-2022-37434: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2022-37434 in master table +â³ Processing CVE-2024-34402... +🧪 Raw Title for CVE-2024-34402: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-34402 in master table +â³ Processing CVE-2024-30161... +🧪 Raw Title for CVE-2024-30161: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-30161 in master table +â³ Processing CVE-2023-35945... +🧪 Raw Title for CVE-2023-35945: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-35945 in master table +â³ Processing CVE-2024-53899... +🧪 Raw Title for CVE-2024-53899: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53899 in master table +â³ Processing CVE-2025-27363... +🧪 Raw Title for CVE-2025-27363: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-27363 in master table +â³ Processing CVE-2024-26651... +🧪 Raw Title for CVE-2024-26651: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-26651 in master table +â³ Processing CVE-2025-1550... +🧪 Raw Title for CVE-2025-1550: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-1550 in master table +â³ Processing CVE-2024-33601... +🧪 Raw Title for CVE-2024-33601: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-33601 in master table +â³ Processing CVE-2024-53427... +🧪 Raw Title for CVE-2024-53427: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53427 in master table +â³ Processing CVE-2023-29933... +🧪 Raw Title for CVE-2023-29933: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-29933 in master table +â³ Processing CVE-2025-25724... +🧪 Raw Title for CVE-2025-25724: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-25724 in master table +â³ Processing CVE-2024-25580... +🧪 Raw Title for CVE-2024-25580: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-25580 in master table +â³ Processing CVE-2023-29941... +🧪 Raw Title for CVE-2023-29941: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-29941 in master table +â³ Processing CVE-2024-46901... +🧪 Raw Title for CVE-2024-46901: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-46901 in master table +â³ Processing CVE-2024-53257... +🧪 Raw Title for CVE-2024-53257: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53257 in master table +â³ Processing CVE-2023-29932... +🧪 Raw Title for CVE-2023-29932: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-29932 in master table +â³ Processing CVE-2023-34410... +🧪 Raw Title for CVE-2023-34410: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-34410 in master table +â³ Processing CVE-2023-31147... +🧪 Raw Title for CVE-2023-31147: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-31147 in master table +â³ Processing CVE-2024-53920... +🧪 Raw Title for CVE-2024-53920: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-53920 in master table +â³ Processing CVE-2024-55549... +🧪 Raw Title for CVE-2024-55549: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-55549 in master table +â³ Processing CVE-2024-12243... +🧪 Raw Title for CVE-2024-12243: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-12243 in master table +â³ Processing CVE-2025-24855... +🧪 Raw Title for CVE-2025-24855: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-24855 in master table +â³ Processing CVE-2024-28863... +🧪 Raw Title for CVE-2024-28863: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2024-28863 in master table +â³ Processing CVE-2025-29768... +🧪 Raw Title for CVE-2025-29768: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2025-29768 in master table +â³ Processing CVE-2023-6683... +🧪 Raw Title for CVE-2023-6683: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-6683 in master table +â³ Processing CVE-2023-6693... +🧪 Raw Title for CVE-2023-6693: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-6693 in master table +â³ Processing CVE-2023-5088... +🧪 Raw Title for CVE-2023-5088: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-5088 in master table +â³ Processing CVE-2020-8565... +🧪 Raw Title for CVE-2020-8565: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2020-8565 in master table +â³ Processing CVE-2023-6004... +🧪 Raw Title for CVE-2023-6004: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-6004 in master table +â³ Processing CVE-2023-6918... +🧪 Raw Title for CVE-2023-6918: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-6918 in master table +â³ Processing CVE-2023-46137... +🧪 Raw Title for CVE-2023-46137: {} +âž¡ï¸ Parsed Title: "" +✅ Updated CVE-2023-46137 in master table +â³ Processing CVE-2025-29806... +🧪 Raw Title for CVE-2025-29806: { + "Value": "Microsoft Edge (Chromium-based) Remote Code Execution Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Edge (Chromium-based) Remote Code Execution Vulnerability" +✅ Updated CVE-2025-29806 in master table +â³ Processing CVE-2025-24071... +🧪 Raw Title for CVE-2025-24071: { + "Value": "Microsoft Windows File Explorer Spoofing Vulnerability" +} +âž¡ï¸ Parsed Title: "Microsoft Windows File Explorer Spoofing Vulnerability" +✅ Updated CVE-2025-24071 in master table +🎉 Enrichment complete for 2025-Mar +[21 Apr 2025, 06:39:28 pm] ✅ enrichCVE_MSRC.js finished with exit code: 0 diff --git a/scripts/runSpringSync_Manual.js b/scripts/runSpringSync_Manual.js new file mode 100644 index 0000000..9700b82 --- /dev/null +++ b/scripts/runSpringSync_Manual.js @@ -0,0 +1,13 @@ +// runSpringSync_Manual.js +import axios from 'axios'; + +async function triggerSpringSync() { + try { + const res = await axios.post('https://sys.psg.net.au:8443/api/admin/scripts/run-scheduled-sync'); + console.log(res.data); + } catch (err) { + console.error("⌠Failed to trigger:", err.response?.data || err.message); + } +} + +triggerSpringSync(); diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..d479789 --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'ld-sysinfo-server' diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/Application.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/Application.java new file mode 100644 index 0000000..59a1d0c --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/Application.java @@ -0,0 +1,15 @@ +package com.psg.dlsysinfo.dl_sysinfo_server; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; + +@SpringBootApplication +@EnableScheduling // ✅ Enables cron-style scheduled tasks across the app +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/auth/Authenticated.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/auth/Authenticated.java new file mode 100644 index 0000000..fae6ef2 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/auth/Authenticated.java @@ -0,0 +1,12 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.auth; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.PARAMETER, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface Authenticated { + // You can define an attribute here if needed, but not a method +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/auth/AuthenticatedData.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/auth/AuthenticatedData.java new file mode 100644 index 0000000..f5d2dde --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/auth/AuthenticatedData.java @@ -0,0 +1,22 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.auth; + +import org.springframework.security.core.Authentication; + +public class AuthenticatedData { + private final Long groupId; + private final Authentication authentication; + + // Constructor + public AuthenticatedData(Long groupId, Authentication authentication) { + this.groupId = groupId; + this.authentication = authentication; + } + + public Long getGroupId() { + return groupId; + } + + public Authentication getAuthentication() { + return authentication; + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/CaptchaConfig.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/CaptchaConfig.java new file mode 100644 index 0000000..75b7c50 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/CaptchaConfig.java @@ -0,0 +1,34 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +@ConfigurationProperties(prefix = "hcaptcha") +public class CaptchaConfig { + private boolean enabled; + private String sitekey; + private String secret; // This will not be serialized + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public String getSitekey() { + return sitekey; + } + + public void setSitekey(String sitekey) { + this.sitekey = sitekey; + } + + public String getSecret() { + return secret; + } + + public void setSecret(String secret) { + this.secret = secret; + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/Config.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/Config.java new file mode 100644 index 0000000..88be119 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/Config.java @@ -0,0 +1,36 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Component +@ConfigurationProperties(prefix = "app") +public class Config { + private MySQLConfig mysql; + private LoggerConfig logger = new LoggerConfig(); + private CaptchaConfig hcaptcha = new CaptchaConfig(); // Default values + + public MySQLConfig getMysql() { + return mysql; + } + + public void setMysql(MySQLConfig mysql) { + this.mysql = mysql; + } + + public LoggerConfig getLogger() { + return logger; + } + + public void setLogger(LoggerConfig logger) { + this.logger = logger; + } + + public CaptchaConfig getHcaptcha() { + return hcaptcha; + } + + public void setHcaptcha(CaptchaConfig hcaptcha) { + this.hcaptcha = hcaptcha; + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/JacksonConfig.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/JacksonConfig.java new file mode 100644 index 0000000..4e1fd42 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/JacksonConfig.java @@ -0,0 +1,20 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.config; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class JacksonConfig { + + @Bean + public ObjectMapper objectMapper() { + ObjectMapper mapper = new ObjectMapper(); + mapper.registerModule(new JavaTimeModule()); + mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + return mapper; + } +} + diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/LogLevel.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/LogLevel.java new file mode 100644 index 0000000..373e88b --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/LogLevel.java @@ -0,0 +1,20 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.config; + +public enum LogLevel { + INFO, + WARN, + ERROR; + + public String toString() { + switch (this) { + case INFO: + return "info"; + case WARN: + return "warn"; + case ERROR: + return "error"; + default: + return "info"; // Default case + } + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/LoggerConfig.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/LoggerConfig.java new file mode 100644 index 0000000..208ea7a --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/LoggerConfig.java @@ -0,0 +1,16 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +@ConfigurationProperties(prefix = "logger") +public class LoggerConfig { + private LogLevel level; + + public LogLevel getLevel() { + return level; + } + + public void setLevel(LogLevel level) { + this.level = level; + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/MySQLConfig.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/MySQLConfig.java new file mode 100644 index 0000000..a4e4e5c --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/MySQLConfig.java @@ -0,0 +1,52 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +@ConfigurationProperties(prefix = "mysql") +public class MySQLConfig { + private String user; + private String password; + private String database; + private String host; + private int port; + + public String getUser() { + return user; + } + + public void setUser(String user) { + this.user = user; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getDatabase() { + return database; + } + + public void setDatabase(String database) { + this.database = database; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public int getPort() { + return port; + } + + public void setPort(int port) { + this.port = port; + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/PingToggle.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/PingToggle.java new file mode 100644 index 0000000..e29a019 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/config/PingToggle.java @@ -0,0 +1,16 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.config; + +import org.springframework.stereotype.Component; + +@Component +public class PingToggle { + private boolean acceptPings = true; + + public boolean isAcceptPings() { + return acceptPings; + } + + public void setAcceptPings(boolean acceptPings) { + this.acceptPings = acceptPings; + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/ActionType.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/ActionType.java new file mode 100644 index 0000000..1485d90 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/ActionType.java @@ -0,0 +1,6 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.controller; + +public enum ActionType { + ADD, + DELETE +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/AdminController.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/AdminController.java new file mode 100644 index 0000000..bf5757b --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/AdminController.java @@ -0,0 +1,120 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.controller; + +import com.psg.dlsysinfo.dl_sysinfo_server.dto.GuestSiteDTO; +import com.psg.dlsysinfo.dl_sysinfo_server.dto.UserDTO; +import com.psg.dlsysinfo.dl_sysinfo_server.entity.SiteCodeword; +import com.psg.dlsysinfo.dl_sysinfo_server.security.CurrentUser; +import com.psg.dlsysinfo.dl_sysinfo_server.service.*; +import jakarta.transaction.Transactional; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.*; +import com.psg.dlsysinfo.dl_sysinfo_server.repository.SiteCodewordRepository; + + +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/api/admin") +@PreAuthorize("hasRole('ADMIN')") +public class AdminController { + + @Autowired + private UserService userService; + + + + + @Autowired + private DataSource dataSource; + + @Autowired + private JdbcTemplate jdbcTemplate; + + + @Autowired + private GuestSiteService guestSiteService; + + @Autowired + private SiteCodewordRepository siteCodewordRepository; + + + + + @GetMapping("/users") + public ResponseEntity> getAllUsersDecrypted(@AuthenticationPrincipal CurrentUser user) { + return ResponseEntity.ok(userService.getAllDecryptedUsers()); + } + + @PutMapping("/users/{userId}/enabled") + public ResponseEntity setUserEnabled( + @PathVariable Long userId, + @RequestParam boolean enabled, + @AuthenticationPrincipal CurrentUser user + ) { + userService.setUserEnabledState(userId, enabled); + return ResponseEntity.ok().build(); + } + + + @PostMapping("/sites") + public ResponseEntity createGuestSite( + @RequestBody GuestSiteDTO dto, + @AuthenticationPrincipal CurrentUser user + ) { + GuestSiteDTO created = guestSiteService.createSite(dto); + return ResponseEntity.ok(created); + } + + @GetMapping("/sites") + public ResponseEntity> getGuestSites(@AuthenticationPrincipal CurrentUser user) { + return ResponseEntity.ok(guestSiteService.getAllSites()); + } + + @PutMapping("/sites/{siteId}/enabled") + public ResponseEntity setGuestSiteEnabled( + @PathVariable Long siteId, + @RequestParam boolean enabled, + @AuthenticationPrincipal CurrentUser user + ) { + guestSiteService.setGuestSiteEnabledState(siteId, enabled); + return ResponseEntity.ok().build(); + } + + @PutMapping("/sites/{siteId}") + public ResponseEntity updateGuestSite( + @PathVariable Long siteId, + @RequestBody GuestSiteDTO dto, + @AuthenticationPrincipal CurrentUser user + ) { + dto.setId(siteId); // Ensure consistency + GuestSiteDTO updated = guestSiteService.updateSite(dto); + return ResponseEntity.ok(updated); + } + + @GetMapping("/codewords") + public ResponseEntity> getDistinctCodewords() { + List codewords = siteCodewordRepository.findAll().stream() + .map(SiteCodeword::getCodeword) + .sorted() + .toList(); + return ResponseEntity.ok(codewords); + } + + + + + + + + +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/AuthController.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/AuthController.java new file mode 100644 index 0000000..09b1a95 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/AuthController.java @@ -0,0 +1,180 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.controller; + +import com.psg.dlsysinfo.dl_sysinfo_server.dto.AuthRequest; +import com.psg.dlsysinfo.dl_sysinfo_server.dto.ChangePasswordRequest; +import com.psg.dlsysinfo.dl_sysinfo_server.dto.LoginResponse; +import com.psg.dlsysinfo.dl_sysinfo_server.entity.UserAuth; +import com.psg.dlsysinfo.dl_sysinfo_server.security.CurrentUser; +import com.psg.dlsysinfo.dl_sysinfo_server.security.EncryptionService; +import com.psg.dlsysinfo.dl_sysinfo_server.security.JwtUtil; +import com.psg.dlsysinfo.dl_sysinfo_server.service.UserService; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseCookie; +import org.springframework.http.ResponseEntity; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/api/auth") +public class AuthController { + + private final AuthenticationManager authenticationManager; + private final JwtUtil jwtUtil; + private final UserService userAuthService; + private final EncryptionService encryptionService; + + @Autowired + private PasswordEncoder passwordEncoder; + + public AuthController(AuthenticationManager authenticationManager, + JwtUtil jwtUtil, + UserService userAuthService, + EncryptionService encryptionService, + Environment environment) { + this.authenticationManager = authenticationManager; + this.jwtUtil = jwtUtil; + this.userAuthService = userAuthService; + this.encryptionService = encryptionService; + } + + private static String stripBOM(String s) { + if (s.startsWith("\uFEFF")) { + return s.substring(1); + } + return s; + } + + private String resolveCookieDomain(HttpServletRequest request) { + String host = request.getHeader("Host"); + System.out.println("🔠Host: " + host); + + if (host != null && host.contains("localhost")) { + return "localhost"; + } + + return ".psg.net.au"; + } + + + + + @PostMapping("/login") + public ResponseEntity authenticateUser(@RequestBody AuthRequest encryptedRequest, + HttpServletRequest request, + HttpServletResponse response) { + try { + String username = encryptionService.decryptData(encryptedRequest.getUsername()).trim(); + String password = encryptionService.decryptData(encryptedRequest.getPassword()).trim(); + password = stripBOM(password).replaceAll("[^\\x20-\\x7E]", "").trim(); + + // 🞠Debug logs + System.out.println("🔓 Decrypted Username: " + username); + System.out.println("🔓 Decrypted Password: " + password); + + UserAuth user = userAuthService.findByUsername(username); + if (user == null) { + System.out.println("⌠User lookup failed for: " + username); + return ResponseEntity.status(401).body(Map.of("error", "User not found")); + } + + System.out.println("👤 Retrieved User from DB: " + user.getUsername()); + System.out.println("🧠 Stored Hash: " + user.getPasswordHash()); + System.out.println("🔠Comparing to decrypted password: " + password); + + boolean passwordMatches = passwordEncoder.matches(password, user.getPasswordHash()); + if (!passwordMatches) { + System.out.println("⌠Password did not match DB hash"); + return ResponseEntity.status(401).body(Map.of("error", "Invalid password")); + } + + + if (user.getClient() == null) { + return ResponseEntity.status(401).body(Map.of("error", "User is not linked to any client")); + } + + String decryptedDisplayName = user.getDisplayNameHash() != null + ? encryptionService.decryptData(user.getDisplayNameHash()) + : ""; + + List roles = List.of(user.getRole()); + System.out.printf("✅ Assigning roles %s to user %s%n", roles, username); + + String token = jwtUtil.generateToken( + username, + decryptedDisplayName, + user.getClient().getClientIdentifier(), + user.getId(), + roles + ); + + String cookieDomain = resolveCookieDomain(request); + + ResponseCookie.ResponseCookieBuilder cookieBuilder = ResponseCookie.from("authToken", token) + .httpOnly(true) + .secure(true) + .path("/") + .sameSite("None") + .maxAge(60 * 60); + + if (!"localhost".equals(cookieDomain)) { + cookieBuilder.domain(cookieDomain); + } + + ResponseCookie cookie = cookieBuilder.build(); + System.out.println("🧠Set-Cookie: " + cookie.toString()); + response.addHeader(HttpHeaders.SET_COOKIE, cookie.toString()); + + return ResponseEntity.ok(new LoginResponse(token, user.getUsername(), user.getId())); + } catch (Exception e) { + System.out.println("🔥 Exception in authenticateUser:"); + e.printStackTrace(); + return ResponseEntity.status(401).body(Map.of("error", "Invalid credentials or decryption error")); + } + + } + + + + @PostMapping("/logout") + public ResponseEntity> logout(HttpServletRequest request, + HttpServletResponse response) { + SecurityContextHolder.clearContext(); + + ResponseCookie expiredCookie = ResponseCookie.from("authToken", "") + .httpOnly(true) + .secure(true) + .path("/") + .sameSite("None") + .maxAge(0) + .domain(resolveCookieDomain(request)) + .build(); + + response.addHeader(HttpHeaders.SET_COOKIE, expiredCookie.toString()); + + return ResponseEntity.ok(Map.of("message", "Logged out successfully")); + } + + @PutMapping("/change-password") + public ResponseEntity changePassword(@RequestBody ChangePasswordRequest request, + @AuthenticationPrincipal CurrentUser user) { + boolean success = userAuthService.changePassword(user.getUsername(), request); + if (success) { + return ResponseEntity.ok("Password changed successfully"); + } else { + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Incorrect current password"); + } + } + + +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/HealthCheckController.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/HealthCheckController.java new file mode 100644 index 0000000..0a301b7 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/HealthCheckController.java @@ -0,0 +1,42 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.controller; + +import com.psg.dlsysinfo.dl_sysinfo_server.config.PingToggle; +import com.psg.dlsysinfo.dl_sysinfo_server.service.UniFiService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +@RestController +@RequestMapping("/api") +public class HealthCheckController { + + private final PingToggle pingToggle; + private final UniFiService uniFiService; + + public HealthCheckController(PingToggle pingToggle, UniFiService uniFiService) { + this.pingToggle = pingToggle; + this.uniFiService = uniFiService; + } + + @GetMapping("/system/ping-status") + public ResponseEntity> pingStatus() { + return ResponseEntity.ok(Map.of("acceptPings", pingToggle.isAcceptPings())); + } + + @GetMapping("/system/unifi-health") + public ResponseEntity> unifiHealth() { + boolean status = uniFiService.isUnifiAvailable(); + return ResponseEntity.ok(Map.of("unifiAvailable", status)); + } + + @PreAuthorize("hasRole('ADMIN')") + @PostMapping("/admin/toggle-ping") + public ResponseEntity togglePing(@RequestParam boolean enabled, @AuthenticationPrincipal Object user) { + pingToggle.setAcceptPings(enabled); + return ResponseEntity.ok("Ping is now " + (enabled ? "ENABLED" : "DISABLED")); + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/ManagementController.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/ManagementController.java new file mode 100644 index 0000000..20a77f2 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/ManagementController.java @@ -0,0 +1,17 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +@RestController +@RequestMapping("/api/admin/manage") +@PreAuthorize("hasRole('ADMIN')") +public class ManagementController { + + + // Other create/delete endpoints can go here +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/PublicGuestSiteController.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/PublicGuestSiteController.java new file mode 100644 index 0000000..7f7b478 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/PublicGuestSiteController.java @@ -0,0 +1,33 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.controller; + +import com.psg.dlsysinfo.dl_sysinfo_server.dto.GuestSiteDTO; +import com.psg.dlsysinfo.dl_sysinfo_server.dto.PublicGuestSiteDTO; +import com.psg.dlsysinfo.dl_sysinfo_server.service.GuestSiteService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/public/sites") +public class PublicGuestSiteController { + + @Autowired + private GuestSiteService guestSiteService; + + @GetMapping("/{siteCode}") + public ResponseEntity getSiteByCode(@PathVariable String siteCode) { + GuestSiteDTO dto = guestSiteService.getSiteByCode(siteCode); + + PublicGuestSiteDTO publicDto = new PublicGuestSiteDTO( + dto.getSiteCode(), + dto.getLocationName(), + dto.getCodeword(), + dto.getQrUrl() + ); + + return ResponseEntity.ok(publicDto); + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/RegisterController.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/RegisterController.java new file mode 100644 index 0000000..cbb3a38 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/RegisterController.java @@ -0,0 +1,73 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.controller; + +import com.psg.dlsysinfo.dl_sysinfo_server.dto.ClientDTO; +import com.psg.dlsysinfo.dl_sysinfo_server.dto.ClientRegisterRequest; +import com.psg.dlsysinfo.dl_sysinfo_server.dto.UserRegisterRequest; +import com.psg.dlsysinfo.dl_sysinfo_server.entity.Client; +import com.psg.dlsysinfo.dl_sysinfo_server.entity.UserAuth; +import com.psg.dlsysinfo.dl_sysinfo_server.repository.ClientRepository; +import com.psg.dlsysinfo.dl_sysinfo_server.security.EncryptionService; +import com.psg.dlsysinfo.dl_sysinfo_server.service.ClientService; +import com.psg.dlsysinfo.dl_sysinfo_server.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/api/auth") +public class RegisterController { + + @Autowired + private ClientService clientService; + + @Autowired + private UserService userService; + + @Autowired + private ClientRepository clientRepository; + + @Autowired + private EncryptionService encryptionService; + + @PreAuthorize("hasRole('ADMIN')") + @GetMapping("/clients") + public ResponseEntity> getAllClients() { + List clients = clientRepository.findAll().stream() + .map(client -> { + String decryptedName; + try { + decryptedName = encryptionService.decryptData(client.getClientNameEncrypted()); + } catch (Exception e) { + decryptedName = "[Decryption failed]"; + } + return new ClientDTO(client.getClientId(), client.getClientIdentifier(), decryptedName); + }) + .toList(); + + return ResponseEntity.ok(clients); + } + + @PostMapping("/register/client") + public ResponseEntity registerClient(@RequestBody ClientRegisterRequest request) { + Client client = clientService.registerClient(request.getClientName()); + return ResponseEntity.ok(Map.of( + "clientId", client.getClientId(), + "clientIdentifier", client.getClientIdentifier() + )); + } + + @PostMapping("/register/user") + public ResponseEntity registerUser(@RequestBody UserRegisterRequest request) { + UserAuth user = userService.registerUser( + request.getUsername(), + request.getPassword(), + request.getRole(), + request.getClientId() + ); + return ResponseEntity.ok(Map.of("userId", user.getId())); + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/ScriptController.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/ScriptController.java new file mode 100644 index 0000000..71e5737 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/ScriptController.java @@ -0,0 +1,287 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.controller; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.*; +import org.springframework.http.MediaType; +import reactor.core.publisher.Flux; +import reactor.core.publisher.FluxSink; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.nio.channels.AsynchronousFileChannel; +import java.nio.ByteBuffer; +import java.time.Duration; +import java.util.concurrent.TimeUnit; +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.Locale; +import java.util.Map; + +@RestController +@RequestMapping("/api/admin/scripts") +public class ScriptController { + + @Value("${spring.datasource.url}") + private String dbUrl; + + @Value("${spring.datasource.username}") + private String dbUser; + + @Value("${spring.datasource.password}") + private String dbPass; + + @Value("${nvd.api.key}") + private String apiKey; + + @Value("${nvd.max-range-days:7}") + private String nvdMaxRangeDays; + + private final File cveLogFile = new File("scripts/cve-sync.log"); + private final File kevLogFile = new File("scripts/kev-sync.log"); + private final File msrcLogFile = new File("scripts/msrc-sync.log"); + + @PreAuthorize("hasRole('ADMIN')") + @PostMapping("/fetch-cve") + public ResponseEntity runCveScript(@AuthenticationPrincipal Object user) { + return triggerScript("fetchCVE.js", "📡 CVE sync launched in background.", cveLogFile); + } + + @PreAuthorize("hasRole('ADMIN')") + @PostMapping("/fetch-kev") + public ResponseEntity runKevScript(@AuthenticationPrincipal Object user) { + return triggerScript("fetchKEV.js", "📡 KEV sync launched in background.", kevLogFile); + } + + @PreAuthorize("hasRole('ADMIN')") + @PostMapping("/fetch-msrc") + public ResponseEntity runMsrcScript(@AuthenticationPrincipal Object user) { + return triggerScript("enrichCVE_MSRC.js", "📡 MSRC sync launched in background.", msrcLogFile); + } + + @PreAuthorize("hasRole('ADMIN')") + @GetMapping("/fetch-cve/logs") + public ResponseEntity fetchLogs(@AuthenticationPrincipal Object user) { + return readLogs(cveLogFile); + } + + @PreAuthorize("hasRole('ADMIN')") + @PostMapping("/fetch-cve/clear-logs") + public ResponseEntity clearLogs(@AuthenticationPrincipal Object user) { + return clearLogs(cveLogFile); + } + @PreAuthorize("hasRole('ADMIN')") + @PostMapping("/fetch-kev/clear-logs") + public ResponseEntity clearKevLogs(@AuthenticationPrincipal Object user) { + return clearLogs(kevLogFile); + } + @PreAuthorize("hasRole('ADMIN')") + @PostMapping("/fetch-msrc/clear-logs") + public ResponseEntity clearMsrcLogs(@AuthenticationPrincipal Object user) { + return clearLogs(msrcLogFile); + } + + + @PreAuthorize("hasRole('ADMIN')") + @GetMapping(value = "/fetch-cve/logs/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE) + public Flux streamLogs(@AuthenticationPrincipal Object user) { + Path logFile = Paths.get("scripts/cve-sync.log"); + + return Flux.interval(Duration.ofSeconds(1)) + .map(tick -> { + try { + byte[] rawBytes = Files.readAllBytes(logFile); + String content = new String(rawBytes, StandardCharsets.UTF_8) + .replace("\r\n", "\n") + .replace("\r", "\n") + .replace("\uFEFF", ""); + return content.isEmpty() ? "📭 No log output yet." : content; + } catch (IOException e) { + return "⌠Failed to read logs: " + e.getMessage(); + } + }); + } + + @PreAuthorize("hasRole('ADMIN')") + @GetMapping(value = "/fetch-kev/logs/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE) + public Flux streamKevLogs(@AuthenticationPrincipal Object user) { + Path logFile = Paths.get("scripts/kev-sync.log"); + + return Flux.create(emitter -> { + final long[] lastKnownPosition = {0}; + + emitter.onRequest(n -> { + try { + if (!Files.exists(logFile)) { + emitter.next("📭 Log file not found yet."); + return; + } + + long fileSize = Files.size(logFile); + + if (fileSize > lastKnownPosition[0]) { + try (RandomAccessFile raf = new RandomAccessFile(logFile.toFile(), "r")) { + raf.seek(lastKnownPosition[0]); + byte[] newBytes = new byte[(int) (fileSize - lastKnownPosition[0])]; + raf.readFully(newBytes); + String newContent = new String(newBytes, StandardCharsets.UTF_8) + .replace("\r\n", "\n") + .replace("\r", "\n") + .replace("\uFEFF", ""); + + emitter.next(newContent); // 👈 perfectly legal now + lastKnownPosition[0] = fileSize; + } + } + } catch (Exception e) { + emitter.error(e); + } + }); + + emitter.onDispose(() -> { + System.out.println("Client disconnected from KEV stream."); + }); + }).delayElements(Duration.ofSeconds(1)); + } + + + + + @PreAuthorize("hasRole('ADMIN')") + @GetMapping(value = "/fetch-msrc/logs/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE) + public Flux streamMsrcLogs(@AuthenticationPrincipal Object user) { + Path logFile = Paths.get("scripts/msrc-sync.log"); + + return Flux.interval(Duration.ofSeconds(1)) + .map(tick -> { + try { + byte[] rawBytes = Files.readAllBytes(logFile); + String content = new String(rawBytes, StandardCharsets.UTF_8) + .replace("\r\n", "\n") + .replace("\r", "\n") + .replace("\uFEFF", ""); + return content.isEmpty() ? "📭 No log output yet." : content; + } catch (IOException e) { + return "⌠Failed to read logs: " + e.getMessage(); + } + }); + } + + + private ResponseEntity triggerScript(String scriptName, String message, File targetLogFile) { + File scriptFile = new File("scripts", scriptName); + if (!scriptFile.exists()) { + return ResponseEntity.status(404).body("⌠" + scriptName + " not found at: " + scriptFile.getAbsolutePath()); + } + + runNodeScript(scriptName, message, targetLogFile); + return ResponseEntity.ok("🚀 " + message); + } + + private void runNodeScript(String scriptName, String startMessage, File logTarget) { + File scriptDir = new File("scripts"); + File scriptFile = new File(scriptDir, scriptName); + + if (!scriptFile.exists()) { + appendLog("⌠" + scriptName + " not found at: " + scriptFile.getAbsolutePath(), logTarget); + return; + } + + new Thread(() -> { + try (PrintWriter logWriter = new PrintWriter( + new OutputStreamWriter(new FileOutputStream(logTarget, true), StandardCharsets.UTF_8), true)) { + + logWriter.println(formatNow() + " 🚀 " + startMessage); + + ProcessBuilder builder = new ProcessBuilder("node", scriptName); + builder.directory(scriptDir); + builder.redirectErrorStream(true); + + Map env = builder.environment(); + env.put("DB_HOST", extractHost(dbUrl)); + env.put("DB_NAME", extractDbName(dbUrl)); + env.put("DB_USER", dbUser); + env.put("DB_PASSWORD", dbPass); + env.put("NVD_API_KEY", apiKey); + env.put("NVD_MAX_RANGE_DAYS", nvdMaxRangeDays); + + env.put("NODE_OPTIONS", "--no-warnings --enable-source-maps"); + env.put("LC_ALL", "en_US.UTF-8"); + env.put("LANG", "en_US.UTF-8"); + env.put("LANGUAGE", "en_US:en"); + + Process process = builder.start(); + + try (BufferedReader reader = new BufferedReader( + new InputStreamReader(process.getInputStream(), StandardCharsets.UTF_8))) { + String line; + while ((line = reader.readLine()) != null) { + logWriter.println(line); + } + } + + int exitCode = process.waitFor(); + logWriter.println(formatNow() + " ✅ " + scriptName + " finished with exit code: " + exitCode); + + } catch (Exception e) { + appendLog("⌠" + scriptName + " error: " + e.getMessage(), logTarget); + } + }).start(); + } + + private String extractHost(String url) { + return url.replace("jdbc:mysql://", "").split(":")[0].split("/")[0]; + } + + private String extractDbName(String url) { + return url.substring(url.lastIndexOf("/") + 1).split("\\?")[0]; + } + + private void appendLog(String message, File logTarget) { + try (PrintWriter logWriter = new PrintWriter( + new OutputStreamWriter(new FileOutputStream(logTarget, true), StandardCharsets.UTF_8), true)) { + logWriter.println(formatNow() + " " + message); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private ResponseEntity readLogs(File logTarget) { + if (!logTarget.exists()) { + return ResponseEntity.ok("📭 No log file found yet."); + } + + try { + byte[] rawBytes = Files.readAllBytes(logTarget.toPath()); + String content = new String(rawBytes, StandardCharsets.UTF_8) + .replace("\r\n", "\n") + .replace("\r", "\n") + .replace("\uFEFF", ""); + return ResponseEntity.ok(content.isEmpty() ? "📭 Log is empty." : content); + } catch (IOException e) { + return ResponseEntity.status(500).body("⌠Error reading logs: " + e.getMessage()); + } + } + + private ResponseEntity clearLogs(File logTarget) { + try { + if (logTarget.exists()) { + Files.delete(logTarget.toPath()); + } + return ResponseEntity.ok("🧹 Logs cleared."); + } catch (IOException e) { + return ResponseEntity.status(500).body("⌠Failed to clear logs: " + e.getMessage()); + } + } + + private String formatNow() { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd LLL yyyy, hh:mm:ss a", Locale.ENGLISH) + .withZone(ZoneId.systemDefault()); + return "[" + formatter.format(java.time.ZonedDateTime.now()).replace("AM", "am").replace("PM", "pm") + "]"; + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/TwoFactorController.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/TwoFactorController.java new file mode 100644 index 0000000..ba4bad8 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/TwoFactorController.java @@ -0,0 +1,37 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.controller; + +import com.psg.dlsysinfo.dl_sysinfo_server.dto.TwoFactorRequest; +import com.psg.dlsysinfo.dl_sysinfo_server.dto.VerifyRequest; +import com.psg.dlsysinfo.dl_sysinfo_server.service.TwoFactorAuthService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/2fa") +public class TwoFactorController { + + @Autowired + private TwoFactorAuthService twoFactorAuthService; + + @PostMapping("/send-code") + public ResponseEntity sendCode(@RequestBody TwoFactorRequest req) { + try { + twoFactorAuthService.sendVerificationCode(req); + return ResponseEntity.ok("Verification code sent"); + } catch (Exception e) { + e.printStackTrace(); // log this + return ResponseEntity.status(500).body("Unable to send verification code: " + e.getMessage()); + } + } + + + @PostMapping("/verify-code") + public ResponseEntity verifyCode(@RequestBody VerifyRequest req) { + boolean valid = twoFactorAuthService.verifyCodeAndAuthorize(req); + return valid ? ResponseEntity.ok("Guest authorized") : ResponseEntity.status(401).body("Invalid code"); + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/UserProfileController.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/UserProfileController.java new file mode 100644 index 0000000..b2340f5 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/controller/UserProfileController.java @@ -0,0 +1,84 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.controller; + +import com.psg.dlsysinfo.dl_sysinfo_server.dto.UserProfileDTO; +import com.psg.dlsysinfo.dl_sysinfo_server.entity.UserAuth; +import com.psg.dlsysinfo.dl_sysinfo_server.security.CurrentUser; +import com.psg.dlsysinfo.dl_sysinfo_server.security.EncryptionService; +import com.psg.dlsysinfo.dl_sysinfo_server.security.JwtUtil; +import com.psg.dlsysinfo.dl_sysinfo_server.service.UserService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/api/user") +@RequiredArgsConstructor +public class UserProfileController { + + private final UserService userAuthService; + private final EncryptionService encryptionService; + private final JwtUtil jwtUtil; + + @PreAuthorize("isAuthenticated()") + @GetMapping("/profile") + public ResponseEntity getUserProfile(@AuthenticationPrincipal CurrentUser user) { + try { + UserAuth userAuth = userAuthService.findByUsername(user.getUsername()); + + UserProfileDTO profileDto = new UserProfileDTO( + userAuth.getUsername(), + encryptionService.decryptData(userAuth.getDisplayNameHash()), + encryptionService.decryptData(userAuth.getFirstNameHash()), + encryptionService.decryptData(userAuth.getLastNameHash()), + encryptionService.decryptData(userAuth.getEmailHash()) + ); + return ResponseEntity.ok(profileDto); + } catch (Exception e) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body("Failed to decrypt user data"); + } + } + + @PreAuthorize("isAuthenticated()") + @PostMapping("/profile") + public ResponseEntity updateUserProfile(@AuthenticationPrincipal CurrentUser user, + @RequestBody UserProfileDTO profileDto) { + try { + UserAuth userAuth = userAuthService.findByUsername(user.getUsername()); + + userAuth.setDisplayNameHash(encryptionService.encryptData(profileDto.getDisplayName())); + userAuth.setFirstNameHash(encryptionService.encryptData(profileDto.getFirstName())); + userAuth.setLastNameHash(encryptionService.encryptData(profileDto.getLastName())); + userAuth.setEmailHash(encryptionService.encryptData(profileDto.getEmail())); + + userAuthService.save(userAuth); + + // ✅ Rebuild token including roles + String decryptedDisplayName = encryptionService.decryptData(userAuth.getDisplayNameHash()); + List roles = List.of(userAuth.getRole()); + + String newToken = jwtUtil.generateToken( + userAuth.getUsername(), + decryptedDisplayName, + userAuth.getClient().getClientIdentifier(), + userAuth.getId(), + roles + ); + + return ResponseEntity.ok(Map.of( + "message", "Profile updated successfully", + "token", newToken + )); + } catch (Exception e) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body("Failed to encrypt or update user data"); + } + } + +} \ No newline at end of file diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/db/DatabaseService.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/db/DatabaseService.java new file mode 100644 index 0000000..2e8af64 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/db/DatabaseService.java @@ -0,0 +1,41 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.db; + +import com.psg.dlsysinfo.dl_sysinfo_server.error.ApiError; +import org.springframework.jdbc.core.JdbcTemplate; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class DatabaseService { + + private final JdbcTemplate jdbcTemplate; + private static final int CURRENT_GROUP_VERSION = 2; + private static final String SHARED_MEMBER = "SharedMember"; // Define your shared member constant + + public DatabaseService(JdbcTemplate jdbcTemplate) { + this.jdbcTemplate = jdbcTemplate; + } + + + private String hashToken(String token, String groupName) throws ApiError { + try { + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + String input = token + groupName; // Combine token and group name for hashing + byte[] hashBytes = digest.digest(input.getBytes()); + StringBuilder hexString = new StringBuilder(); + + for (byte b : hashBytes) { + String hex = Integer.toHexString(0xff & b); + if (hex.length() == 1) hexString.append('0'); + hexString.append(hex); + } + + return hexString.toString(); // Return the hashed token as a hex string + } catch (NoSuchAlgorithmException e) { + throw new ApiError("Hashing algorithm not found", e); + + } + } + + // ... (rest of your methods remain unchanged) +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/AuthRequest.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/AuthRequest.java new file mode 100644 index 0000000..f01ae3e --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/AuthRequest.java @@ -0,0 +1,23 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.dto; + +public class AuthRequest { + private String username; + private String password; + + // Getters and Setters + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/ChangePasswordRequest.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/ChangePasswordRequest.java new file mode 100644 index 0000000..c7292de --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/ChangePasswordRequest.java @@ -0,0 +1,25 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.dto; + +public class ChangePasswordRequest { + private String currentPassword; + private String newPassword; + + public String getCurrentPassword() { + return currentPassword; + } + + public void setCurrentPassword(String currentPassword) { + this.currentPassword = currentPassword; + } + + public String getNewPassword() { + return newPassword; + } + + public void setNewPassword(String newPassword) { + this.newPassword = newPassword; + } +} + + + diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/ClientDTO.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/ClientDTO.java new file mode 100644 index 0000000..9ccae2a --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/ClientDTO.java @@ -0,0 +1,17 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.dto; + +public class ClientDTO { + private Long clientId; + private String clientIdentifier; + private String clientName; // decrypted name + + public ClientDTO(Long clientId, String clientIdentifier, String clientName) { + this.clientId = clientId; + this.clientIdentifier = clientIdentifier; + this.clientName = clientName; + } + + public Long getClientId() { return clientId; } + public String getClientIdentifier() { return clientIdentifier; } + public String getClientName() { return clientName; } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/ClientRegisterRequest.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/ClientRegisterRequest.java new file mode 100644 index 0000000..2429750 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/ClientRegisterRequest.java @@ -0,0 +1,11 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class ClientRegisterRequest { + private String clientName; +} + diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/GuestSiteDTO.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/GuestSiteDTO.java new file mode 100644 index 0000000..c6dfc9c --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/GuestSiteDTO.java @@ -0,0 +1,81 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.dto; + +public class GuestSiteDTO { + private Long id; + private String siteCode; + private String locationName; + private String codeword; + private String qrUrl; + private boolean active; + private Long clientId; + + public GuestSiteDTO() { + // default constructor + } + + public GuestSiteDTO(Long id, String siteCode, String locationName, String codeword, String qrUrl, boolean active, Long clientId) { + this.id = id; + this.siteCode = siteCode; + this.locationName = locationName; + this.codeword = codeword; + this.qrUrl = qrUrl; + this.active = active; + this.clientId = clientId; + } + + public Long getId() { + return id; + } + + public String getSiteCode() { + return siteCode; + } + + public String getLocationName() { + return locationName; + } + + public String getCodeword() { + return codeword; + } + + public String getQrUrl() { + return qrUrl; + } + + public boolean isActive() { + return active; + } + + public Long getClientId() { + return clientId; + } + + public void setId(Long id) { + this.id = id; + } + + public void setSiteCode(String siteCode) { + this.siteCode = siteCode; + } + + public void setLocationName(String locationName) { + this.locationName = locationName; + } + + public void setCodeword(String codeword) { + this.codeword = codeword; + } + + public void setQrUrl(String qrUrl) { + this.qrUrl = qrUrl; + } + + public void setActive(boolean active) { + this.active = active; + } + + public void setClientId(Long clientId) { + this.clientId = clientId; + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/LoginResponse.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/LoginResponse.java new file mode 100644 index 0000000..b954e6a --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/LoginResponse.java @@ -0,0 +1,26 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.dto; + +public class LoginResponse { + private String token; + private String username; + private Long userId; + + // Constructor, Getters, and Setters + public LoginResponse(String token, String username, Long userId) { + this.token = token; + this.username = username; + this.userId = userId; + } + + public String getToken() { + return token; + } + + public String getUsername() { + return username; + } + public Long getUserId() { + return userId; + } + +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/PublicGuestSiteDTO.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/PublicGuestSiteDTO.java new file mode 100644 index 0000000..9fb3437 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/PublicGuestSiteDTO.java @@ -0,0 +1,29 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.dto; + +public class PublicGuestSiteDTO { + private String siteCode; + private String locationName; + private String codeword; + private String qrUrl; + + public PublicGuestSiteDTO() {} + + public PublicGuestSiteDTO(String siteCode, String locationName, String codeword, String qrUrl) { + this.siteCode = siteCode; + this.locationName = locationName; + this.codeword = codeword; + this.qrUrl = qrUrl; + } + + public String getSiteCode() { return siteCode; } + public void setSiteCode(String siteCode) { this.siteCode = siteCode; } + + public String getLocationName() { return locationName; } + public void setLocationName(String locationName) { this.locationName = locationName; } + + public String getCodeword() { return codeword; } + public void setCodeword(String codeword) { this.codeword = codeword; } + + public String getQrUrl() { return qrUrl; } + public void setQrUrl(String qrUrl) { this.qrUrl = qrUrl; } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/TwoFactorRequest.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/TwoFactorRequest.java new file mode 100644 index 0000000..5bef172 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/TwoFactorRequest.java @@ -0,0 +1,31 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.dto; + +public class TwoFactorRequest { + private String to; + private String siteCode; + private String codeword; + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getSiteCode() { + return siteCode; + } + + public void setSiteCode(String siteCode) { + this.siteCode = siteCode; + } + + public String getCodeword() { + return codeword; + } + + public void setCodeword(String codeword) { + this.codeword = codeword; + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/UserDTO.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/UserDTO.java new file mode 100644 index 0000000..9e3a2a1 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/UserDTO.java @@ -0,0 +1,54 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.dto; + +public class UserDTO { + private Long id; + private String username; + private String displayName; + private String firstName; + private String lastName; + private String email; + private String role; + private String clientIdentifier; + private String clientName; + private boolean enabled; + + public UserDTO() {} + + public UserDTO(Long id, String username, String displayName, String firstName, String lastName, + String email, String role, String clientIdentifier,String clientName, boolean enabled) { + this.id = id; + this.username = username; + this.displayName = displayName; + this.firstName = firstName; + this.lastName = lastName; + this.email = email; + this.role = role; + this.clientIdentifier = clientIdentifier; + this.clientName = clientName; + this.enabled = enabled; + } + + // Getters + public Long getId() { return id; } + public String getUsername() { return username; } + public String getDisplayName() { return displayName; } + public String getFirstName() { return firstName; } + public String getLastName() { return lastName; } + public String getEmail() { return email; } + public String getRole() { return role; } + public String getClientIdentifier() { return clientIdentifier; } + public boolean isEnabled() { return enabled; } + public String getClientName() { return clientName; } + + // Setters + public void setId(Long id) { this.id = id; } + public void setUsername(String username) { this.username = username; } + public void setDisplayName(String displayName) { this.displayName = displayName; } + public void setFirstName(String firstName) { this.firstName = firstName; } + public void setLastName(String lastName) { this.lastName = lastName; } + public void setEmail(String email) { this.email = email; } + public void setRole(String role) { this.role = role; } + public void setClientIdentifier(String clientIdentifier) { this.clientIdentifier = clientIdentifier; } + public void setEnabled(boolean enabled) { this.enabled = enabled; } + public void setClientName(String clientName) { this.clientName = clientName; } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/UserProfileDTO.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/UserProfileDTO.java new file mode 100644 index 0000000..4cf5ad4 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/UserProfileDTO.java @@ -0,0 +1,61 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.dto; + +public class UserProfileDTO { + private String username; + private String displayName; + private String firstName; + private String lastName; + private String email; + + public UserProfileDTO() {} + + public UserProfileDTO(String username, String displayName, String firstName, String lastName, String email) { + this.username = username; + this.displayName = displayName; + this.firstName = firstName; + this.lastName = lastName; + this.email = email; + } + + // Getters + public String getUsername() { + return username; + } + + public String getDisplayName() { + return displayName; + } + + public String getFirstName() { + return firstName; + } + + public String getLastName() { + return lastName; + } + + public String getEmail() { + return email; + } + + // Setters + public void setUsername(String username) { + this.username = username; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public void setEmail(String email) { + this.email = email; + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/UserRegisterRequest.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/UserRegisterRequest.java new file mode 100644 index 0000000..c9ead1b --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/UserRegisterRequest.java @@ -0,0 +1,15 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class UserRegisterRequest { + private String username; + private String password; + private String role; + private Long clientId; +} + + diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/VerifyRequest.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/VerifyRequest.java new file mode 100644 index 0000000..3372e54 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/dto/VerifyRequest.java @@ -0,0 +1,13 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.dto; + +import lombok.Data; + +@Data +public class VerifyRequest { + private String to; + private String code; + private String clientMac; + private String apMac; + private String siteCode; // optional but useful + private String codeword; // 💡 THIS is what was missing +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/entity/Client.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/entity/Client.java new file mode 100644 index 0000000..4406abb --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/entity/Client.java @@ -0,0 +1,58 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.entity; + +import jakarta.persistence.*; +import java.util.List; + +@Entity +@Table(name = "clients") +public class Client { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "clientId") + private Long clientId; + + + @Column(nullable = false, unique = true) + private String clientIdentifier; // likely a UUID or slug for public use + + @Column(name = "client_name_encrypted", nullable = false) + private String clientNameEncrypted; + + + @OneToMany(mappedBy = "client", cascade = CascadeType.ALL) + private List guestSites; + + // --- Getters & Setters --- + public Long getClientId() { + return clientId; + } + + public void setClientId(Long clientId) { + this.clientId = clientId; + } + + public String getClientIdentifier() { + return clientIdentifier; + } + + public void setClientIdentifier(String clientIdentifier) { + this.clientIdentifier = clientIdentifier; + } + + public String getClientNameEncrypted() { + return clientNameEncrypted; + } + + public void setClientNameEncrypted(String clientNameEncrypted) { + this.clientNameEncrypted = clientNameEncrypted; + } + + public List getGuestSites() { + return guestSites; + } + + public void setGuestSites(List guestSites) { + this.guestSites = guestSites; + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/entity/GuestSite.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/entity/GuestSite.java new file mode 100644 index 0000000..28ececa --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/entity/GuestSite.java @@ -0,0 +1,102 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.entity; + +import jakarta.persistence.*; +import lombok.Data; + +@Entity +@Table(name = "guest_sites") +public class GuestSite { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "site_code", unique = true, nullable = false) + private String siteCode; + + @Column(name = "location_name", nullable = false) + private String locationName; + + @ManyToOne + @JoinColumn(name = "codeword_id", referencedColumnName = "id") + private SiteCodeword codeword; + + @Column(name = "qr_url") + private String qrUrl; + + @Column(name = "is_active") + private boolean active; + + @ManyToOne + @JoinColumn(name = "clientId", nullable = false) + private Client client; + + @Column(name = "unifi_site_id") + private String unifiSiteId; + + // ✅ Explicit getters + public Long getId() { + return id; + } + + public String getSiteCode() { + return siteCode; + } + + public String getLocationName() { + return locationName; + } + + public SiteCodeword getCodeword() { + return codeword; + } + + public String getQrUrl() { + return qrUrl; + } + + public boolean isActive() { + return active; + } + + public Client getClient() { + return client; + } + + // ✅ Explicit setters + public void setId(Long id) { + this.id = id; + } + + public void setSiteCode(String siteCode) { + this.siteCode = siteCode; + } + + public void setLocationName(String locationName) { + this.locationName = locationName; + } + + public void setCodeword(SiteCodeword codeword) { + this.codeword = codeword; + } + + public void setQrUrl(String qrUrl) { + this.qrUrl = qrUrl; + } + + public void setActive(boolean active) { + this.active = active; + } + + public void setClient(Client client) { + this.client = client; + } + public String getUnifiSiteId() { + return unifiSiteId; + } + + public void setUnifiSiteId(String unifiSiteId) { + this.unifiSiteId = unifiSiteId; + } + +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/entity/SiteCodeword.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/entity/SiteCodeword.java new file mode 100644 index 0000000..a8a8283 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/entity/SiteCodeword.java @@ -0,0 +1,31 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.entity; + +import jakarta.persistence.*; + +@Entity +@Table(name = "site_codewords") +public class SiteCodeword { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "codeword", nullable = false, unique = true) + private String codeword; + + public Long getId() { + return id; + } + + public String getCodeword() { + return codeword; + } + + public void setId(Long id) { + this.id = id; + } + + public void setCodeword(String codeword) { + this.codeword = codeword; + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/entity/UserAuth.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/entity/UserAuth.java new file mode 100644 index 0000000..45b53b8 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/entity/UserAuth.java @@ -0,0 +1,120 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.entity; + +import jakarta.persistence.*; +import java.time.LocalDateTime; + +@Entity +@Table(name = "users") +public class UserAuth { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "username", nullable = false, length = 50) + private String username; + + @Column(name = "password_hash", nullable = false, length = 60) + private String passwordHash; + + @ManyToOne + @JoinColumn(name = "clientId", nullable = false) + private Client client; + + @Column(nullable = false) + private String role; + + @Column(name = "created_at", nullable = false) + private LocalDateTime createdAt; + + @Column(name = "password_changed_at") + private LocalDateTime passwordChangedAt; + + @Column(name = "display_name_hash", length = 100) + private String displayNameHash; + + @Column(name = "first_name_hash") + private String firstNameHash; + + @Column(name = "last_name_hash") + private String lastNameHash; + + + @Column(name = "email_hash", length = 256) + private String emailHash; + + @Column(nullable = false) + private boolean enabled = true; + + + + + // Getters and Setters + + public Long getId() { return id; } + + public void setId(Long id) { this.id = id; } + + public String getUsername() { return username; } + + public void setUsername(String username) { this.username = username; } + + public String getPasswordHash() { return passwordHash; } + + public void setPasswordHash(String passwordHash) { this.passwordHash = passwordHash; } + + public Client getClient() { return client; } + + public void setClient(Client client) { this.client = client; } + + public String getRole() { return role; } + + public void setRole(String role) { this.role = role; } + + public LocalDateTime getCreatedAt() { return createdAt; } + + public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = createdAt; } + + public LocalDateTime getPasswordChangedAt() { + return passwordChangedAt; + } + + public void setPasswordChangedAt(LocalDateTime passwordChangedAt) { + this.passwordChangedAt = passwordChangedAt; + } + + public String getDisplayNameHash() {return displayNameHash; } + + public void setDisplayNameHash(String displayNameHash) {this.displayNameHash = displayNameHash; } + + public String getEmailHash() { return emailHash; } + + public void setEmailHash(String emailHash) { this.emailHash = emailHash; } + public String getFirstNameHash() { + return firstNameHash; + } + + public void setFirstNameHash(String firstNameHash) { + this.firstNameHash = firstNameHash; + } + + public String getLastNameHash() { + return lastNameHash; + } + + public void setLastNameHash(String lastNameHash) { + this.lastNameHash = lastNameHash; + } + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + public String getClientNameEncrypted() { + return client != null ? client.getClientNameEncrypted() : null; + } + +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/error/ApiError.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/error/ApiError.java new file mode 100644 index 0000000..0a5bc96 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/error/ApiError.java @@ -0,0 +1,19 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.error; + +public class ApiError extends Throwable { + private String message; + private Throwable cause; // Optional + + // Existing constructor + public ApiError(String message) { + this.message = message; + } + + // New constructor + public ApiError(String message, Throwable cause) { + this.message = message; + this.cause = cause; + } + + // Getters and setters... +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/model/LoginRequest.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/model/LoginRequest.java new file mode 100644 index 0000000..43b8eb4 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/model/LoginRequest.java @@ -0,0 +1,14 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.model; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class LoginRequest { + // Getters and setters + private String username; + private String password; + +} + diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/repository/ClientRepository.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/repository/ClientRepository.java new file mode 100644 index 0000000..e67ba08 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/repository/ClientRepository.java @@ -0,0 +1,11 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.repository; + +import com.psg.dlsysinfo.dl_sysinfo_server.entity.Client; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface ClientRepository extends JpaRepository { + Optional findByClientIdentifier(String clientIdentifier); +} + diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/repository/GuestSiteRepository.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/repository/GuestSiteRepository.java new file mode 100644 index 0000000..66f6317 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/repository/GuestSiteRepository.java @@ -0,0 +1,11 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.repository; + +import com.psg.dlsysinfo.dl_sysinfo_server.entity.GuestSite; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface GuestSiteRepository extends JpaRepository { + boolean existsBySiteCode(String siteCode); + Optional findBySiteCode(String siteCode); +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/repository/SiteCodewordRepository.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/repository/SiteCodewordRepository.java new file mode 100644 index 0000000..8d97770 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/repository/SiteCodewordRepository.java @@ -0,0 +1,10 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.repository; + +import com.psg.dlsysinfo.dl_sysinfo_server.entity.SiteCodeword; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface SiteCodewordRepository extends JpaRepository { + Optional findByCodewordIgnoreCase(String codeword); +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/repository/UserAuthRepository.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/repository/UserAuthRepository.java new file mode 100644 index 0000000..36a0aac --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/repository/UserAuthRepository.java @@ -0,0 +1,16 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.repository; + +import com.psg.dlsysinfo.dl_sysinfo_server.entity.UserAuth; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.Optional; + +public interface UserAuthRepository extends JpaRepository { + + @Query("SELECT u FROM UserAuth u JOIN FETCH u.client WHERE u.username = :username") + Optional findByUsernameWithClient(@Param("username") String username); + + Optional findByUsername(String username); // still used by Spring Security +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/AuthenticationInfo.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/AuthenticationInfo.java new file mode 100644 index 0000000..6dd035c --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/AuthenticationInfo.java @@ -0,0 +1,29 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.security; + +public class AuthenticationInfo { + private Long groupId; // Keep this as Long + private String version; // This should be String + + // Constructor + public AuthenticationInfo(Long groupId, String version) { + this.groupId = groupId; // Should match Long type + this.version = version; // Should match String type + } + + // Getters and setters + public Long getGroupId() { + return groupId; + } + + public void setGroupId(Long groupId) { + this.groupId = groupId; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/BasicConfiguration.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/BasicConfiguration.java new file mode 100644 index 0000000..dade6d4 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/BasicConfiguration.java @@ -0,0 +1,173 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.security; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.convert.converter.Converter; +import com.psg.dlsysinfo.dl_sysinfo_server.service.UserService; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Lazy; +import org.springframework.security.authentication.AbstractAuthenticationToken; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.crypto.factory.PasswordEncoderFactories; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.oauth2.jwt.Jwt; +import org.springframework.security.oauth2.jwt.JwtDecoder; +import org.springframework.security.oauth2.jwt.NimbusJwtDecoder; +import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationConverter; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.stereotype.Component; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.CorsConfigurationSource; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.web.filter.OncePerRequestFilter; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.IOException; +import java.util.Base64; +import java.util.List; + +@Configuration +@EnableWebSecurity +public class BasicConfiguration implements WebMvcConfigurer { + + + private final UserService userAuthService; + private final JwtToCurrentUserConverter jwtToCurrentUserConverter; + + @Autowired + public BasicConfiguration(@Lazy UserService userAuthService, JwtToCurrentUserConverter jwtToCurrentUserConverter) { + this.userAuthService = userAuthService; + this.jwtToCurrentUserConverter = jwtToCurrentUserConverter; + } + + @Bean + public PasswordEncoder passwordEncoder() { + return PasswordEncoderFactories.createDelegatingPasswordEncoder(); + } + + @Bean + public JwtUtil jwtUtil() { + return new JwtUtil(); // Ensure you have a JwtUtil bean + } + + @Bean + public JwtDecoder jwtDecoder(@Value("${jwt.secret}") String base64Secret) { + byte[] secret = Base64.getDecoder().decode(base64Secret); + SecretKey secretKey = new SecretKeySpec(secret, 0, secret.length, "HmacSHA256"); + return NimbusJwtDecoder.withSecretKey(secretKey).build(); + } + + @Bean + public JwtAuthenticationFilter jwtAuthenticationFilter(JwtUtil jwtUtil) { + return new JwtAuthenticationFilter(userAuthService, jwtUtil); // Pass GroupService + } + + + + + + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + http + .cors(cors -> cors.configurationSource(corsConfigurationSource())) + .csrf(csrf -> csrf.disable()) + .sessionManagement(session -> session + .sessionCreationPolicy(SessionCreationPolicy.STATELESS)) + .authorizeHttpRequests(auth -> auth + + // Public endpoints + .requestMatchers("/register", "/login", "/error").permitAll() + .requestMatchers("/api/auth/login", "/api/auth/**").permitAll() + .requestMatchers("/api/test/**").permitAll() + .requestMatchers("/api/public/**").permitAll() + .requestMatchers("/api/admin/scripts/run-scheduled-sync").permitAll() + .requestMatchers("/admin/vulnerabilities").permitAll() + .requestMatchers("/api/2fa/**").permitAll() + + // Internal system health checks, available without auth + .requestMatchers("/api/system/**").permitAll() + + // Pre-fetched cached information to prevent API abuse. + .requestMatchers("/api/cached/**").authenticated() + + // Authenticated API endpoints + .requestMatchers("/api/ping", "/api/system-info").authenticated() + .requestMatchers("/api/devices", "/api/devices/**").authenticated() + .requestMatchers("/api/user/**").authenticated() + .requestMatchers("/api/vuln/**").authenticated() + + // Special: Allow stream endpoints for authenticated users (not strict role) + .requestMatchers("/api/admin/scripts/*/logs/stream").authenticated() + + + // Admin-only API and frontend views + .requestMatchers("/api/admin/**").hasRole("ADMIN") + .requestMatchers("/admin/**").hasRole("ADMIN") + + // All other endpoints + .anyRequest().authenticated() + ) + .addFilterBefore(jwtAuthenticationFilter(jwtUtil()), UsernamePasswordAuthenticationFilter.class) + .addFilterAfter(new CustomCacheControlFilter(), UsernamePasswordAuthenticationFilter.class); + + return http.build(); + } + + + @Bean + public AuthenticationManager authenticationManager(HttpSecurity http) throws Exception { + AuthenticationManagerBuilder authenticationManagerBuilder = + http.getSharedObject(AuthenticationManagerBuilder.class); + authenticationManagerBuilder.userDetailsService(userAuthService).passwordEncoder(passwordEncoder()); + return authenticationManagerBuilder.build(); + } + + @Bean + public CorsConfigurationSource corsConfigurationSource() { + CorsConfiguration configuration = new CorsConfiguration(); + configuration.setAllowedOrigins(List.of("http://localhost:3000","https://localhost:3000", "https://sys.psg.net.au", "http://172.16.10.180:3000", "https://wireless.psg.net.au")); + configuration.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "OPTIONS")); + configuration.setAllowedHeaders(List.of("*")); + configuration.setAllowCredentials(true); + configuration.setExposedHeaders(List.of("Set-Cookie", "Authorization")); + + + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", configuration); + return source; + } + @Component + public class CorsDebugFilter extends OncePerRequestFilter { + @Override + protected void doFilterInternal(HttpServletRequest request, + HttpServletResponse response, + FilterChain filterChain) throws ServletException, IOException { + System.out.println("Origin: " + request.getHeader("Origin")); + System.out.println("Cookie: " + request.getHeader("Cookie")); + filterChain.doFilter(request, response); + } + } + @Autowired + private CurrentUserArgumentResolver currentUserArgumentResolver; + + @Override + public void addArgumentResolvers(List resolvers) { + resolvers.add(currentUserArgumentResolver); + } + + +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/CurrentUser.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/CurrentUser.java new file mode 100644 index 0000000..3834255 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/CurrentUser.java @@ -0,0 +1,20 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.security; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.List; + +@Getter +@AllArgsConstructor +public class CurrentUser { + private final String username; + private final String displayName; + private final String clientIdentifier; + private final Long userId; + private final List roles; + + public boolean hasRole(String role) { + return roles != null && roles.contains(role); + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/CurrentUserArgumentResolver.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/CurrentUserArgumentResolver.java new file mode 100644 index 0000000..bab4f49 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/CurrentUserArgumentResolver.java @@ -0,0 +1,30 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.security; + +import org.springframework.core.MethodParameter; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.method.support.ModelAndViewContainer; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.context.request.WebRequest; +import org.springframework.web.bind.support.WebDataBinderFactory; +import org.springframework.stereotype.Component; + +@Component +public class CurrentUserArgumentResolver implements HandlerMethodArgumentResolver { + + @Override + public boolean supportsParameter(MethodParameter parameter) { + return parameter.getParameterType().equals(CurrentUser.class); + } + + @Override + public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, + NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if (authentication != null && authentication.getPrincipal() instanceof CurrentUser currentUser) { + return currentUser; + } + throw new IllegalArgumentException("Authenticated user context is missing"); + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/CustomCacheControlFilter.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/CustomCacheControlFilter.java new file mode 100644 index 0000000..a8ee4dd --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/CustomCacheControlFilter.java @@ -0,0 +1,32 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.security; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.web.filter.OncePerRequestFilter; + +import java.io.IOException; + +public class CustomCacheControlFilter extends OncePerRequestFilter { + @Override + protected void doFilterInternal(HttpServletRequest request, + HttpServletResponse response, + FilterChain filterChain) throws ServletException, IOException { + + if (response != null) { + // Prevent caching of sensitive data + response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, proxy-revalidate"); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Expires", "0"); + + // Harden browser security + response.setHeader("X-Content-Type-Options", "nosniff"); + response.setHeader("X-Frame-Options", "DENY"); + response.setHeader("X-XSS-Protection", "1; mode=block"); + response.setHeader("Referrer-Policy", "no-referrer"); + } + + filterChain.doFilter(request, response); + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/EncryptionService.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/EncryptionService.java new file mode 100644 index 0000000..9a17552 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/EncryptionService.java @@ -0,0 +1,80 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.security; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Base64; + +@Service // ✅ Mark this as a Spring Service so it can be injected +public class EncryptionService { + + @Value("${encryption.aes.key}") // Load AES Key from properties + private String aesKey; + + @Value("${encryption.aes.iv}") // Load AES IV from properties + private String aesIv; + + private static final String ALGORITHM = "AES/CBC/PKCS5Padding"; + + public String decryptData(String encryptedData) throws Exception { + if (encryptedData == null || encryptedData.trim().isEmpty()) { + return ""; + } + + Cipher cipher = Cipher.getInstance(ALGORITHM); + SecretKeySpec keySpec = new SecretKeySpec(aesKey.getBytes(), "AES"); + + byte[] ivBytes = aesIv.getBytes(); + if (ivBytes.length != 16) { + throw new IllegalArgumentException("Invalid IV length: " + ivBytes.length + " bytes (must be 16 bytes)"); + } + IvParameterSpec ivSpec = new IvParameterSpec(ivBytes); + + byte[] encryptedBytes = Base64.getDecoder().decode(encryptedData); + if (encryptedBytes.length % 16 != 0) { + throw new IllegalArgumentException("Invalid encrypted data length: must be multiple of 16 bytes."); + } + + cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec); + byte[] decryptedBytes = cipher.doFinal(encryptedBytes); + + return new String(decryptedBytes, StandardCharsets.UTF_8); + } + + + public String encryptData(String plainText) throws Exception { + Cipher cipher = Cipher.getInstance(ALGORITHM); + SecretKeySpec keySpec = new SecretKeySpec(aesKey.getBytes(StandardCharsets.UTF_8), "AES"); + + byte[] ivBytes = aesIv.getBytes(StandardCharsets.UTF_8); + if (ivBytes.length != 16) { + throw new IllegalArgumentException("Invalid IV length: " + ivBytes.length + " bytes (must be 16 bytes)"); + } + + IvParameterSpec ivSpec = new IvParameterSpec(ivBytes); + + cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); + byte[] encryptedBytes = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8)); + + return Base64.getEncoder().encodeToString(encryptedBytes); + } + + + public String hashString(String input) { + try { + // 🔑 Using SHA-256 hashing algorithm + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] hash = digest.digest(input.getBytes(StandardCharsets.UTF_8)); + + // 🔑 Encode the hash as Base64 for storage + return Base64.getEncoder().encodeToString(hash); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException("Error generating hash: " + e.getMessage(), e); + } + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/JwtAuthenticationFilter.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/JwtAuthenticationFilter.java new file mode 100644 index 0000000..9e113af --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/JwtAuthenticationFilter.java @@ -0,0 +1,138 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.security; + +import com.psg.dlsysinfo.dl_sysinfo_server.service.UserService; +import io.jsonwebtoken.JwtException; +import io.jsonwebtoken.ExpiredJwtException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.web.filter.OncePerRequestFilter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.security.core.userdetails.UsernameNotFoundException; + + +import java.io.IOException; +import java.util.List; + +public class JwtAuthenticationFilter extends OncePerRequestFilter { + + + private final UserService userService; + private final JwtUtil jwtUtil; + + public JwtAuthenticationFilter(UserService userService, JwtUtil jwtUtil) { + this.userService = userService; + this.jwtUtil = jwtUtil; + } + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) + throws ServletException, IOException { + + String clientIp = extractClientIp(request); + String uri = request.getRequestURI(); + System.out.println("🌠Incoming request to " + uri + " from IP: " + clientIp); + + String jwt = null; + + // Try to get token from Authorization header + String authHeader = request.getHeader("Authorization"); + if (authHeader != null && authHeader.startsWith("Bearer ")) { + jwt = authHeader.substring(7); + System.out.println("🔠JWT found in Authorization header"); + } + + // If not in header, try cookie + if (jwt == null && request.getCookies() != null) { + for (jakarta.servlet.http.Cookie cookie : request.getCookies()) { + if ("authToken".equals(cookie.getName())) { + jwt = cookie.getValue(); + System.out.println("🪠JWT extracted from authToken cookie"); + break; + } + } + } + + if (jwt == null) { + System.out.println("🔓 No JWT found in header or cookie"); + chain.doFilter(request, response); + return; + } + + try { + String username = jwtUtil.extractUsername(jwt); + System.out.println("👤 Extracted username: " + username + " from IP: " + clientIp); + + if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) { + UserDetails userDetails = userService.loadUserByUsername(username); + + if (jwtUtil.validateToken(jwt, username)) { + String displayName = jwtUtil.extractDisplayName(jwt); + String clientIdentifier = jwtUtil.extractClientIdentifier(jwt); + Long userId = jwtUtil.extractUserId(jwt); + + List roles = jwtUtil.extractRoles(jwt); // you’ll define this next + + CurrentUser currentUser = new CurrentUser( + username, + displayName, + clientIdentifier, + userId, + roles + ); + + + + UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken( + currentUser, null, userDetails.getAuthorities() + ); + + SecurityContextHolder.getContext().setAuthentication(authToken); + System.out.println("✅ Authenticated user: " + username + " from IP: " + clientIp); + } + } + + } catch (ExpiredJwtException e) { + System.out.println("â° JWT expired from IP " + clientIp + ": " + e.getMessage()); + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + response.setContentType("application/json"); + response.getWriter().write("{\"error\": \"Token expired\"}"); + return; + + } catch (JwtException | IllegalArgumentException e) { + System.out.println("⌠Invalid JWT from IP " + clientIp + ": " + e.getMessage()); + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + response.setContentType("application/json"); + response.getWriter().write("{\"error\": \"Invalid token\"}"); + return; + + } catch (UsernameNotFoundException e) { + System.out.println("⌠User not found from IP " + clientIp + ": " + e.getMessage()); + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + response.setContentType("application/json"); + response.getWriter().write("{\"error\": \"User not found\"}"); + return; + } + + chain.doFilter(request, response); + } + + + private String extractClientIp(HttpServletRequest request) { + String cfIp = request.getHeader("CF-Connecting-IP"); + if (cfIp != null && !cfIp.isEmpty()) return cfIp; + + String xfHeader = request.getHeader("X-Forwarded-For"); + if (xfHeader != null && !xfHeader.isEmpty()) { + return xfHeader.split(",")[0].trim(); + } + + return request.getRemoteAddr(); + } + + + +} \ No newline at end of file diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/JwtToCurrentUserConverter.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/JwtToCurrentUserConverter.java new file mode 100644 index 0000000..434be1d --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/JwtToCurrentUserConverter.java @@ -0,0 +1,26 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.security; + +import org.springframework.core.convert.converter.Converter; +import org.springframework.security.oauth2.jwt.Jwt; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class JwtToCurrentUserConverter implements Converter { + + @Override + public CurrentUser convert(Jwt jwt) { + // 👇 Try to get the "roles" claim as a list of strings + var roles = jwt.getClaimAsStringList("roles"); + + return new CurrentUser( + jwt.getSubject(), // username + jwt.getClaim("displayname"), // display name + jwt.getClaim("idauth"), // clientIdentifier + jwt.getClaim("userId"), // userId + roles != null ? roles : List.of() // roles fallback to empty list + ); + } + +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/JwtUtil.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/JwtUtil.java new file mode 100644 index 0000000..a062a19 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/JwtUtil.java @@ -0,0 +1,146 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.security; + +import io.jsonwebtoken.*; +import io.jsonwebtoken.security.Keys; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.crypto.SecretKey; +import java.util.Base64; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.function.Function; + +@Component +public class JwtUtil { + + @Value("${jwt.secret}") + private String secretKeyString; + + @Value("${jwt.expiration}") + private long jwtExpirationMs; + + /** + * Converts Base64-encoded key from properties to SecretKey. + */ + private SecretKey getSigningKey() { + byte[] keyBytes = Base64.getDecoder().decode(secretKeyString); + return Keys.hmacShaKeyFor(keyBytes); + } + + /** + * Generates a JWT token with a username and idauth. + */ + public String generateToken(String username, String displayName, String idauth, Long userId, List roles) { + return Jwts.builder() + .setSubject(username) + .claim("displayname", displayName) + .claim("idauth", idauth) + .claim("userId", userId) + .claim("roles", roles) + .setIssuedAt(new Date()) + .setExpiration(new Date(System.currentTimeMillis() + jwtExpirationMs)) + .signWith(SignatureAlgorithm.HS256, getSigningKey()) + .compact(); + } + + + + /** + * Extracts claims from a token. + */ + private Claims extractAllClaims(String token) { + try { + return Jwts.parserBuilder() + .setSigningKey(getSigningKey()) + .build() + .parseClaimsJws(token) + .getBody(); + } catch (ExpiredJwtException e) { + System.err.println("â° JWT expired: " + e.getMessage()); + throw new ExpiredJwtException(e.getHeader(), e.getClaims(), "JWT expired", e); // re-throw + } catch (JwtException e) { + System.err.println("⌠Invalid JWT: " + e.getMessage()); + throw new IllegalArgumentException("Invalid JWT Token", e); + } + } + + public String extractDisplayName(String token) { + return extractClaim(token, claims -> claims.get("displayname", String.class)); + } + + public Long extractUserId(String token) { + return extractClaim(token, claims -> claims.get("userId", Long.class)); + } + + + public String extractUsername(String token) { + return extractClaim(token, Claims::getSubject); + } + + public String extractIdAuth(String token) { + return extractClaim(token, claims -> claims.get("idauth", String.class)); + } + + public String extractClientIdentifier(String token) { + return extractIdAuth(token); + } + + public T extractClaim(String token, Function claimsResolver) { + return claimsResolver.apply(extractAllClaims(token)); + } + + public boolean isTokenExpired(String token) { + return extractClaim(token, Claims::getExpiration).before(new Date()); + } + + /** + * Validates the token and checks if it matches the provided username. + */ + public boolean validateToken(String token, String username) { + try { + return extractUsername(token).equals(username) && !isTokenExpired(token); + } catch (JwtException | IllegalArgumentException e) { + System.err.println("Token validation failed: " + e.getMessage()); + return false; + } + } + + /** + * Overloaded method for validating token without username check. + */ + public boolean validateToken(String token) { + try { + return !isTokenExpired(token); + } catch (JwtException | IllegalArgumentException e) { + System.err.println("Token validation failed: " + e.getMessage()); + return false; + } + } + + /** + * Extracts token from Authorization header. + */ + public String extractToken(String authHeader) { + if (authHeader != null && authHeader.startsWith("Bearer ")) { + return authHeader.substring(7); // Remove "Bearer " prefix + } + return authHeader; // If it's a direct token, return as is + } + + public List extractRoles(String token) { + Claims claims = extractAllClaims(token); + Object rolesClaim = claims.get("roles"); + + if (rolesClaim instanceof List) { + return ((List) rolesClaim).stream() + .filter(String.class::isInstance) + .map(String.class::cast) + .toList(); + } + + return Collections.emptyList(); + } + +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/TokenResolver.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/TokenResolver.java new file mode 100644 index 0000000..7e7019c --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/security/TokenResolver.java @@ -0,0 +1,28 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.security; + +import jakarta.servlet.http.HttpServletRequest; +import org.springframework.stereotype.Component; + +@Component +public class TokenResolver { + + public String resolveToken(HttpServletRequest request) { + // Check Authorization header first + String authHeader = request.getHeader("Authorization"); + if (authHeader != null && authHeader.startsWith("Bearer ")) { + return authHeader.substring(7); + } + + // Fallback to Cookie + if (request.getCookies() != null) { + for (var cookie : request.getCookies()) { + if ("authToken".equals(cookie.getName())) { + return cookie.getValue(); + } + } + } + + return null; + } +} + diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/ClientService.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/ClientService.java new file mode 100644 index 0000000..dcf4e06 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/ClientService.java @@ -0,0 +1,31 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.service; + +import com.psg.dlsysinfo.dl_sysinfo_server.entity.Client; +import com.psg.dlsysinfo.dl_sysinfo_server.repository.ClientRepository; +import com.psg.dlsysinfo.dl_sysinfo_server.security.EncryptionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.UUID; + +@Service +public class ClientService { + + @Autowired + private ClientRepository clientRepository; + + @Autowired + private EncryptionService encryptionService; + + public Client registerClient(String clientName) { + try { + Client client = new Client(); + client.setClientIdentifier(UUID.randomUUID().toString()); + client.setClientNameEncrypted(encryptionService.encryptData(clientName)); + + return clientRepository.save(client); + } catch (Exception e) { + throw new RuntimeException("Failed to register client", e); + } + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/EmailService.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/EmailService.java new file mode 100644 index 0000000..ab8319a --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/EmailService.java @@ -0,0 +1,47 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.service; + +import jakarta.mail.MessagingException; +import jakarta.mail.internet.MimeMessage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.env.Environment; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; +import org.springframework.stereotype.Service; + +@Service +public class EmailService { + @Value("${app.mail.from}") + private String from; + + @Value("${app.mail.to}") + private String to; + + + + + private final JavaMailSender mailSender; + private final Environment env; + + @Autowired + public EmailService(JavaMailSender mailSender, Environment env) { + this.mailSender = mailSender; + this.env = env; + } + + public void sendHtmlEmail(String subject, String htmlBody) { + MimeMessage message = mailSender.createMimeMessage(); + + try { + MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8"); + helper.setFrom(from); + helper.setTo(to); + helper.setSubject(subject); + helper.setText(htmlBody, true); // `true` enables HTML + + mailSender.send(message); + } catch (MessagingException e) { + System.err.println("⌠Error sending HTML email: " + e.getMessage()); + } + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/GuestSiteService.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/GuestSiteService.java new file mode 100644 index 0000000..b2adce2 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/GuestSiteService.java @@ -0,0 +1,125 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.service; + +import com.psg.dlsysinfo.dl_sysinfo_server.dto.GuestSiteDTO; +import com.psg.dlsysinfo.dl_sysinfo_server.entity.Client; +import com.psg.dlsysinfo.dl_sysinfo_server.entity.GuestSite; +import com.psg.dlsysinfo.dl_sysinfo_server.entity.SiteCodeword; +import com.psg.dlsysinfo.dl_sysinfo_server.repository.ClientRepository; +import com.psg.dlsysinfo.dl_sysinfo_server.repository.GuestSiteRepository; +import com.psg.dlsysinfo.dl_sysinfo_server.repository.SiteCodewordRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.jdbc.core.JdbcTemplate; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +public class GuestSiteService { + + @Autowired + private GuestSiteRepository guestSiteRepository; + + @Autowired + private SiteCodewordRepository siteCodewordRepository; + + @Autowired + private ClientRepository clientRepository; + + + @Autowired + private JdbcTemplate jdbcTemplate; + + + + public List getAllSites() { + return guestSiteRepository.findAll().stream().map(site -> { + GuestSiteDTO dto = new GuestSiteDTO(); + dto.setId(site.getId()); + dto.setSiteCode(site.getSiteCode()); + dto.setLocationName(site.getLocationName()); + dto.setCodeword(site.getCodeword().getCodeword()); + dto.setQrUrl(site.getQrUrl()); + dto.setActive(site.isActive()); + System.out.println("🔎 Site " + site.getSiteCode() + " active? " + site.isActive()); + + + if (site.getClient() != null) { + dto.setClientId(site.getClient().getClientId()); + } + return dto; + + }).collect(Collectors.toList()); + + + } + + public GuestSiteDTO createSite(GuestSiteDTO dto) { + GuestSite site = new GuestSite(); + site.setSiteCode(dto.getSiteCode()); + site.setLocationName(dto.getLocationName()); + SiteCodeword codeword = siteCodewordRepository.findByCodewordIgnoreCase(dto.getCodeword()) + .orElseThrow(() -> new RuntimeException("Codeword not found")); + site.setCodeword(codeword); + + site.setQrUrl(dto.getQrUrl()); + site.setActive(dto.isActive()); + + if (dto.getClientId() != null) { + Client client = clientRepository.findById(dto.getClientId()) + .orElseThrow(() -> new RuntimeException("Client not found")); + site.setClient(client); + } + + GuestSite saved = guestSiteRepository.save(site); + dto.setId(saved.getId()); + return dto; + } + public void setGuestSiteEnabledState(Long siteId, boolean enabled) { + GuestSite site = guestSiteRepository.findById(siteId) + .orElseThrow(() -> new RuntimeException("Guest site not found")); + site.setActive(enabled); + guestSiteRepository.save(site); + } + public GuestSiteDTO getSiteByCode(String siteCode) { + GuestSite site = guestSiteRepository.findBySiteCode(siteCode) + .orElseThrow(() -> new RuntimeException("Site not found")); + + GuestSiteDTO dto = new GuestSiteDTO(); + dto.setId(site.getId()); + dto.setSiteCode(site.getSiteCode()); + dto.setLocationName(site.getLocationName()); + dto.setCodeword(site.getCodeword().getCodeword()); + dto.setQrUrl(site.getQrUrl()); + dto.setActive(site.isActive()); + if (site.getClient() != null) { + dto.setClientId(site.getClient().getClientId()); + } + return dto; + } + + public GuestSiteDTO updateSite(GuestSiteDTO dto) { + GuestSite site = guestSiteRepository.findById(dto.getId()) + .orElseThrow(() -> new RuntimeException("Guest site not found")); + + site.setSiteCode(dto.getSiteCode()); + site.setLocationName(dto.getLocationName()); + site.setQrUrl(dto.getQrUrl()); + + // Fetch the related SiteCodeword entity + SiteCodeword codeword = siteCodewordRepository.findByCodewordIgnoreCase(dto.getCodeword()) + .orElseThrow(() -> new RuntimeException("Codeword not found")); + + site.setCodeword(codeword); + + // Save updated site + GuestSite updated = guestSiteRepository.save(site); + + // Update and return the DTO (optional — or map from updated) + dto.setCodeword(codeword.getCodeword()); + return dto; + } + + + +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/TwoFactorAuthService.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/TwoFactorAuthService.java new file mode 100644 index 0000000..f3340ca --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/TwoFactorAuthService.java @@ -0,0 +1,112 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.service; + +import com.psg.dlsysinfo.dl_sysinfo_server.dto.TwoFactorRequest; +import com.psg.dlsysinfo.dl_sysinfo_server.dto.VerifyRequest; +import com.psg.dlsysinfo.dl_sysinfo_server.entity.GuestSite; +import com.psg.dlsysinfo.dl_sysinfo_server.repository.GuestSiteRepository; +import com.twilio.Twilio; +import com.twilio.rest.verify.v2.service.Verification; +import com.twilio.rest.verify.v2.service.VerificationCheck; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.*; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import java.util.Map; +import java.util.Optional; + +@Service +public class TwoFactorAuthService { + + @Value("${twilio.account-sid}") + private String accountSid; + + @Value("${twilio.auth-token}") + private String authToken; + + @Value("${twilio.verify-service-sid}") + private String verifyServiceSid; + + @Value("${unifi.api-key}") + private String unifiApiKey; + + @Value("${unifi.gateway-url}") + private String unifiGatewayUrl; + + private final GuestSiteRepository guestSiteRepository; + + public TwoFactorAuthService(GuestSiteRepository guestSiteRepository) { + this.guestSiteRepository = guestSiteRepository; + } + + public void sendVerificationCode(TwoFactorRequest request) { + Twilio.init(accountSid, authToken); + + String to = request.getTo(); + String channel = to.contains("@") ? "email" : "sms"; + + Verification verification = Verification.creator(verifyServiceSid, to, channel).create(); + + if (!"pending".equalsIgnoreCase(verification.getStatus())) { + throw new RuntimeException("Failed to send verification code"); + } + } + + public boolean verifyCodeAndAuthorize(VerifyRequest request) { + Twilio.init(accountSid, authToken); + + VerificationCheck check = VerificationCheck.creator(verifyServiceSid) + .setTo(request.getTo()) + .setCode(request.getCode()) + .create(); + + if (!"approved".equalsIgnoreCase(check.getStatus())) { + return false; + } + + Optional siteOpt = guestSiteRepository.findBySiteCode(request.getSiteCode()); + if (siteOpt.isEmpty()) { + throw new RuntimeException("Invalid site"); + } + + GuestSite site = siteOpt.get(); + if (!site.isActive() || !site.getCodeword().getCodeword().equalsIgnoreCase(request.getCodeword())) { + return false; + } + + // Use MAC address as clientId (Unifi API expects this) + String clientMac = request.getClientMac().toUpperCase(); + String siteId = site.getUnifiSiteId(); // ↠make sure this is stored in DB + + authorizeWithUnifi(clientMac, siteId); + + return true; + } + + private void authorizeWithUnifi(String clientId, String siteId) { + RestTemplate restTemplate = new RestTemplate(); + + String url = String.format("%s/v1/sites/%s/clients/%s/actions", unifiGatewayUrl, siteId, clientId); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.set("X-API-KEY", unifiApiKey); + + Map payload = Map.of( + "action", "AUTHORIZE_GUEST_ACCESS", + "timeLimitMinutes", 1440, + "dataUsageLimitMBytes", 2048, + "rxRateLimitKbps", 10000, + "txRateLimitKbps", 10000 + ); + + HttpEntity> request = new HttpEntity<>(payload, headers); + + ResponseEntity response = restTemplate.postForEntity(url, request, String.class); + System.out.println("UniFi authorization response: " + response.getBody()); + + if (!response.getStatusCode().is2xxSuccessful()) { + throw new RuntimeException("Failed to authorize guest via new UniFi API"); + } + } +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/UniFiService.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/UniFiService.java new file mode 100644 index 0000000..3283b6a --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/UniFiService.java @@ -0,0 +1,56 @@ + +package com.psg.dlsysinfo.dl_sysinfo_server.service; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.*; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +import java.util.List; + +@Service +public class UniFiService { + + @Value("${unifi.api-key}") + private String apiKey; + + @Value("${unifi.gateway-url}") + private String gatewayUrl; + + private final RestTemplate restTemplate = new RestTemplate(); + private static final Logger logger = LoggerFactory.getLogger(UniFiService.class); + + + public boolean isUnifiAvailable() { + String url = gatewayUrl + "/proxy/network/integration/v1/sites"; + + logger.info("Checking UniFi availability at URL: {}", url); + + HttpHeaders headers = new HttpHeaders(); + headers.set("X-API-KEY", apiKey); + headers.setAccept(List.of(MediaType.APPLICATION_JSON)); + HttpEntity request = new HttpEntity<>(headers); + + try { + ResponseEntity response = restTemplate.exchange( + url, + HttpMethod.GET, + request, + String.class + ); + + logger.info("UniFi response status: {}", response.getStatusCode()); + logger.debug("UniFi response body: {}", response.getBody()); + + return response.getStatusCode().is2xxSuccessful(); + } catch (Exception e) { + logger.error("Error while checking UniFi availability", e); + return false; + } + } + +} + diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/UserService.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/UserService.java new file mode 100644 index 0000000..b76f2ef --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/service/UserService.java @@ -0,0 +1,173 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.service; + +import com.psg.dlsysinfo.dl_sysinfo_server.dto.ChangePasswordRequest; +import com.psg.dlsysinfo.dl_sysinfo_server.dto.UserDTO; +import com.psg.dlsysinfo.dl_sysinfo_server.dto.UserProfileDTO; +import com.psg.dlsysinfo.dl_sysinfo_server.entity.Client; +import com.psg.dlsysinfo.dl_sysinfo_server.entity.UserAuth; +import com.psg.dlsysinfo.dl_sysinfo_server.repository.ClientRepository; +import com.psg.dlsysinfo.dl_sysinfo_server.repository.UserAuthRepository; +import com.psg.dlsysinfo.dl_sysinfo_server.security.EncryptionService; +import jakarta.transaction.Transactional; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Primary; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +@Service +@Primary +@Transactional +public class UserService implements UserDetailsService { + + private final UserAuthRepository userAuthRepository; + private final PasswordEncoder passwordEncoder; + + @Autowired + private EncryptionService encryptionService; + + @Autowired + public UserService(UserAuthRepository userAuthRepository, PasswordEncoder passwordEncoder) { + this.userAuthRepository = userAuthRepository; + this.passwordEncoder = passwordEncoder; + } + + @Autowired + private ClientRepository clientRepository; + + public UserAuth registerUser(String username, String password, String role, Long clientId) { + if (password == null || password.isEmpty()) { + throw new IllegalArgumentException("Password cannot be null or empty"); + } + + String hashedPassword = passwordEncoder.encode(password); + + UserAuth userAuth = new UserAuth(); + userAuth.setUsername(username); + userAuth.setPasswordHash(hashedPassword); + userAuth.setRole(role); + userAuth.setCreatedAt(java.time.LocalDateTime.now()); + + Client client = clientRepository.findById(clientId) + .orElseThrow(() -> new IllegalArgumentException("Invalid client ID")); + userAuth.setClient(client); + + return userAuthRepository.save(userAuth); + } + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + Optional userOpt = userAuthRepository.findByUsername(username); + UserAuth userAuth = userOpt.orElseThrow(() -> new UsernameNotFoundException("User not found")); + + return User.builder() + .username(userAuth.getUsername()) + .password(userAuth.getPasswordHash()) + .roles(userAuth.getRole()) + .build(); + } + + public UserAuth findByUsername(String username) { + return userAuthRepository.findByUsernameWithClient(username) + .orElse(null); + } + + public boolean changePassword(String username, ChangePasswordRequest request) { + Optional userOpt = userAuthRepository.findByUsername(username); + if (userOpt.isPresent()) { + UserAuth user = userOpt.get(); + + try { + String decryptedCurrentPassword = encryptionService.decryptData(request.getCurrentPassword()); + String decryptedNewPassword = encryptionService.decryptData(request.getNewPassword()); + + if (passwordEncoder.matches(decryptedCurrentPassword, user.getPasswordHash())) { + user.setPasswordHash(passwordEncoder.encode(decryptedNewPassword)); + user.setPasswordChangedAt(LocalDateTime.now()); + userAuthRepository.save(user); + return true; + } + + } catch (Exception e) { + System.out.println("⌠Decryption failed: " + e.getMessage()); + } + } + return false; + } + + public UserProfileDTO getUserProfile(String username) { + UserAuth user = userAuthRepository.findByUsername(username) + .orElseThrow(() -> new UsernameNotFoundException("User not found")); + + try { + return new UserProfileDTO( + user.getUsername(), + user.getDisplayNameHash() != null ? encryptionService.decryptData(user.getDisplayNameHash()) : "", + user.getFirstNameHash() != null ? encryptionService.decryptData(user.getFirstNameHash()) : "", + user.getLastNameHash() != null ? encryptionService.decryptData(user.getLastNameHash()) : "", + user.getEmailHash() != null ? encryptionService.decryptData(user.getEmailHash()) : "" + ); + } catch (Exception e) { + throw new RuntimeException("Failed to decrypt user profile data", e); + } + } + + public void updateUserProfile(String username, UserProfileDTO profileDto) { + UserAuth user = userAuthRepository.findByUsername(username) + .orElseThrow(() -> new UsernameNotFoundException("User not found")); + + try { + user.setDisplayNameHash(encryptionService.encryptData(profileDto.getDisplayName())); + user.setFirstNameHash(encryptionService.encryptData(profileDto.getFirstName())); + user.setLastNameHash(encryptionService.encryptData(profileDto.getLastName())); + user.setEmailHash(encryptionService.encryptData(profileDto.getEmail())); + } catch (Exception e) { + throw new RuntimeException("Failed to encrypt user profile fields", e); + } + + userAuthRepository.save(user); + } + + public List getAllDecryptedUsers() { + return userAuthRepository.findAll().stream() + .map(user -> { + try { + return new UserDTO( + user.getId(), + user.getUsername(), + encryptionService.decryptData(user.getDisplayNameHash()), + encryptionService.decryptData(user.getFirstNameHash()), + encryptionService.decryptData(user.getLastNameHash()), + encryptionService.decryptData(user.getEmailHash()), + user.getRole(), + user.getClient().getClientIdentifier(), + encryptionService.decryptData(user.getClient().getClientNameEncrypted()), + user.isEnabled() + ); + } catch (Exception e) { + throw new RuntimeException("Failed to decrypt user data for user: " + user.getUsername(), e); + } + }) + .collect(Collectors.toList()); + } + + public UserAuth save(UserAuth user) { + return userAuthRepository.save(user); + } + + public void setUserEnabledState(Long userId, boolean enabled) { + UserAuth user = userAuthRepository.findById(userId) + .orElseThrow(() -> new UsernameNotFoundException("User not found")); + user.setEnabled(enabled); + userAuthRepository.save(user); + } + +} diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/util/HashUtil.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/util/HashUtil.java new file mode 100644 index 0000000..ab68f52 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/util/HashUtil.java @@ -0,0 +1,19 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.util; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Base64; + +public class HashUtil { + public static String sha256(String input) { + try { + MessageDigest md = MessageDigest.getInstance("SHA-256"); + byte[] hash = md.digest(input.getBytes(StandardCharsets.UTF_8)); + return Base64.getEncoder().encodeToString(hash); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException("SHA-256 hashing failed", e); + } + } +} + diff --git a/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/util/NormalizationUtils.java b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/util/NormalizationUtils.java new file mode 100644 index 0000000..88c3a46 --- /dev/null +++ b/src/main/java/com/psg/dlsysinfo/dl_sysinfo_server/util/NormalizationUtils.java @@ -0,0 +1,50 @@ +package com.psg.dlsysinfo.dl_sysinfo_server.util; + +public class NormalizationUtils { + + public static String normalize(String input) { + if (input == null) return ""; + return input + .toLowerCase() + .replaceAll("[^a-z0-9]", "_") + .replaceAll("_+", "_") + .replaceAll("^_|_$", ""); + } + + public static String simplifyPublisher(String publisher) { + String norm = normalize(publisher); + return switch (norm) { + case "microsoft_corporation", "microsoft" -> "microsoft"; + case "adobe_systems_incorporated", "adobe_inc" -> "adobe"; + case "oracle_corporation" -> "oracle"; + case "videolan" -> "videolan"; // ensure no unexpected variation + default -> norm; + }; + } + + public static String normalizeProduct(String appName) { + if (appName == null) return ""; + + String cleaned = stripJunkFromName(appName); + String norm = normalize(cleaned); + + return switch (norm) { + case "vlc_media_player" -> "vlc"; + case "adobe_reader", "acrobat_reader", "adobe_acrobat_reader" -> "acrobat_reader"; + case "java_platform_se", "java", "java_se", "java_platform" -> "jdk"; // adapt based on your CPE data + case "google_chrome" -> "chrome"; + case "windows_powershell" -> "powershell"; + case "microsoft_teams" -> "teams"; + case "visual_studio_code" -> "vscode"; + default -> norm; + }; + } + + public static String stripJunkFromName(String input) { + if (input == null) return ""; + return input + .replaceAll("(?i)(\\(tm\\)|\\(r\\)|\\(c\\)|â„¢|®|©)", "") + .replaceAll("\\s+", " ") + .trim(); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..5d60c93 --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,89 @@ +spring.application.name=ld-sysinfo-server + +# Database Configuration +spring.datasource.url=jdbc:mysql://localhost:3306/db_psg-spring-backend +spring.datasource.username=root +spring.datasource.password=6DRR4xWvHBhSqLGtIOEKa7gHjKnX33Hf + +# JPA configuration +spring.jpa.hibernate.ddl-auto=none +spring.jpa.show-sql=false +spring.jpa.properties.hibernate.format_sql=true +spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl +spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect + + +# Spring Security stuff +spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration +logging.level.org.springframework.security=DEBUG +logging.level.com.dashboard=DEBUG + +# Turn off SQL logs temporarily +logging.level.org.hibernate.SQL=OFF +logging.level.org.hibernate.type.descriptor.sql.BasicBinder=OFF + +# JWT stuff +jwt.secret=JBYLzeID2fj7DJ1f+HIk3KeKwRAjo/jxZoJ2PZWe7YQ= +jwt.expiration=36000000 + +# AES from Client App +encryption.aes.key=HWJGbwmF2pWdXySDExMNEbJSrXn0YCBF +encryption.aes.iv=VWYRtYCfch0sKs6k + +# Twilio Stuff +twilio.account-sid=AC9194c43c94a7d38bd37356f829edb2c3 +twilio.auth-token=4a76601f13b493d8fdd0745123fa692c +twilio.verify-service-sid=VAb6f6ba723cb5bb076f695958fefae370 + +# New Unifi Stuff +unifi.api-key=T9QvofmtB3vSALbZyl9EusZw79TGkg_q +unifi.gateway-url=https://unifi.psg.net.au + + +#Unifi Stuff +unifi.auth.url=https://unifi.psg.net.au/api/s/default/cmd/stamgr +UNIFI_PORT=9443 +UNIFI_SITE=29jn47fk +UNIFI_USERNAME=svc_api_access +UNIFI_PASSWORD="\>`(w,YoIK_Y+a=oQ^3e" +UNIFI_CSRF_TOKEN=6t7fwydRvwPoJSEPujigmLmwHwQj1it8 +UNIFI_SESSION_ID=aDptge8Bx54V51BxSS9pQ97qmoWyLkZF + +# Server stuff +server.address=0.0.0.0 +server.port=8443 +server.ssl.enabled=true +server.ssl.key-alias=springboot +server.ssl.key-store=file:/C:/Users/sonder/Git/GuestWirelessDEVELOPMENT/backend/src/main/resources/springboot.p12 +server.ssl.key-store-password=Howaboutno123! +server.ssl.key-store-type=PKCS12 +logging.level.org.apache.tomcat.util.net.SSLUtilBase=DEBUG +logging.level.org.apache.tomcat.util.net.SSLHostConfig=DEBUG + + +# Script Controller (NVD) related +nvd.api.key=42b4f093-e8c4-4110-a7d1-6ab2ba6234aa +nvd.max-range-days=30 + +# SMTP/Mail related +spring.mail.host=psg-net-au.mail.protection.outlook.com +app.mail.from=oversight@psg.net.au +app.mail.to=bailey@psg.net.au +spring.mail.port=25 +spring.mail.protocol=smtp +spring.mail.properties.mail.smtp.auth=false +spring.mail.properties.mail.smtp.starttls.enable=false +spring.mail.properties.mail.smtp.connectiontimeout=30000 +spring.mail.properties.mail.smtp.timeout=60000 +spring.mail.properties.mail.smtp.writetimeout=60000 + + + + +# Legacy/Logger related +app.logger.level=Info +app.hcaptcha.enabled=false +app.hcaptcha.sitekey= +app.hcaptcha.secret= + + diff --git a/src/main/resources/keystore.p12 b/src/main/resources/keystore.p12 new file mode 100644 index 0000000000000000000000000000000000000000..b0c6a42f207517f145feb98c63401aa26b2e509a GIT binary patch literal 2744 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/springboot_OLD.p12 b/src/main/resources/springboot_OLD.p12 new file mode 100644 index 0000000000000000000000000000000000000000..b065d9c9db7746fa7653848d0481f9e477edaf72 GIT binary patch literal 4047 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 BuXz9f literal 0 HcmV?d00001 diff --git a/src/test/java/BcryptTest.java b/src/test/java/BcryptTest.java new file mode 100644 index 0000000..972c252 --- /dev/null +++ b/src/test/java/BcryptTest.java @@ -0,0 +1,13 @@ +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + +public class BcryptTest { + public static void main(String[] args) { + BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(12); // 🔹 Make sure this matches DB cost + + String plainTextPassword = "testuser"; + String storedHash = "$2a$12$8hUCqm9xSHelrm2KO3LXvundybefBGl8GeiOmnqdmyst.V1NFcUQ2"; // Use latest hash + + boolean matches = passwordEncoder.matches(plainTextPassword, storedHash); + System.out.println("✅ Password Matches: " + matches); + } +} diff --git a/src/test/java/GenerateBcryptHash.java b/src/test/java/GenerateBcryptHash.java new file mode 100644 index 0000000..52a89eb --- /dev/null +++ b/src/test/java/GenerateBcryptHash.java @@ -0,0 +1,11 @@ +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + +public class GenerateBcryptHash { + public static void main(String[] args) { + BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(12); + String plainTextPassword = "testuser"; + String bcryptHash = passwordEncoder.encode(plainTextPassword); + + System.out.println("🔹 New BCrypt Hash: " + bcryptHash); + } +} \ No newline at end of file