In Airsonic 10.2.1, RecoverController.java generates passwords via org.apache.commons.lang.RandomStringUtils, which uses java.util.Random internally. This PRNG has a 48-bit seed that can easily be bruteforced, leading to trivial privilege escalation attacks.
{
"cpe": "cpe:2.3:a:airsonic_project:airsonic:10.2.1:*:*:*:*:*:*:*",
"extracted_events": [
{
"introduced": "10.2.1"
},
{
"last_affected": "10.2.1"
}
],
"source": [
"CPE_STRING",
"REFERENCES"
]
}
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2019-10908.json"
[
{
"deprecated": false,
"digest": {
"function_hash": "325504793078609483966411285950876329835",
"length": 1295
},
"id": "CVE-2019-10908-86ef7199",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/airsonic/airsonic/commit/61c842923a6d60d4aedd126445a8437b53b752c8",
"target": {
"file": "airsonic-main/src/main/java/org/airsonic/player/controller/RecoverController.java",
"function": "recover"
}
},
{
"deprecated": false,
"digest": {
"line_hashes": [
"306902619043511208777043774479233319458",
"235260804270135839556344748120016677644",
"52252328664859783619630708361983114047",
"177140614392107701064657302501927018764",
"254785093093872409594456233108426115839",
"98420451014953792449252712386928920945",
"53254821030174006499322925024081186116",
"237882640957566887093044149016074411570",
"41150062776900013791720395791978191229",
"91895520617278394574573291235136116966",
"70447786806686895237620879881896881667",
"220929181535967927907967111098680390572",
"79080806081490026652277835295310742198",
"14103496997639108755502257368917195492"
],
"threshold": 0.9
},
"id": "CVE-2019-10908-de09202f",
"signature_type": "Line",
"signature_version": "v1",
"source": "https://github.com/airsonic/airsonic/commit/61c842923a6d60d4aedd126445a8437b53b752c8",
"target": {
"file": "airsonic-main/src/main/java/org/airsonic/player/controller/RecoverController.java"
}
}
]
"2026-07-08T15:54:50Z"