The unserialize() function supported a type code, "S", which was meant to be supported only for APC serialization. This type code allowed arbitrary memory addresses to be accessed as if they were static StringData objects. This issue affected HHVM prior to v4.32.3, between versions 4.33.0 and 4.56.0, 4.57.0, 4.58.0, 4.58.1, 4.59.0, 4.60.0, 4.61.0, 4.62.0.
{
"versions": [
{
"introduced": "0"
},
{
"fixed": "4.32.3"
},
{
"introduced": "4.33.0"
},
{
"fixed": "4.56.1"
},
{
"introduced": "0"
},
{
"last_affected": "4.57.0"
},
{
"introduced": "0"
},
{
"last_affected": "4.58.0"
},
{
"introduced": "0"
},
{
"last_affected": "4.58.1"
},
{
"introduced": "0"
},
{
"last_affected": "4.59.0"
},
{
"introduced": "0"
},
{
"last_affected": "4.60.0"
},
{
"introduced": "0"
},
{
"last_affected": "4.61.0"
},
{
"introduced": "0"
},
{
"last_affected": "4.62.0"
}
]
}"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2020-1899.json"
"2026-04-11T12:40:07Z"
[
{
"digest": {
"length": 1174.0,
"function_hash": "296497231455137404359568022051131713760"
},
"deprecated": false,
"signature_type": "Function",
"id": "CVE-2020-1899-381b6cb0",
"signature_version": "v1",
"source": "https://github.com/facebook/hhvm/commit/1107228a5128d3ca1c4add8ac1635d933cbbe2e9",
"target": {
"function": "VariableUnserializer::matchString",
"file": "hphp/runtime/base/variable-unserializer.cpp"
}
},
{
"digest": {
"threshold": 0.9,
"line_hashes": [
"331473762518125757472384839031571060902",
"4158620335537989919269120992316136210",
"37536044244405383633242229082848527784",
"140335216194151808759673220052749435881"
]
},
"deprecated": false,
"signature_type": "Line",
"id": "CVE-2020-1899-b7606651",
"signature_version": "v1",
"source": "https://github.com/facebook/hhvm/commit/55dc2e1650c1e79e67b7f0ef20e51cd2d504a4bb",
"target": {
"file": "hphp/runtime/version.h"
}
},
{
"digest": {
"threshold": 0.9,
"line_hashes": [
"286093828909174357221555418457755310879",
"96311019219661911020751373701839576672",
"281574740350394436842520560909858709910",
"140335216194151808759673220052749435881"
]
},
"deprecated": false,
"signature_type": "Line",
"id": "CVE-2020-1899-e22db0a3",
"signature_version": "v1",
"source": "https://github.com/facebook/hhvm/commit/d6af4b525b31c96526b2508642d58dbf5c7d496c",
"target": {
"file": "hphp/runtime/version.h"
}
},
{
"digest": {
"threshold": 0.9,
"line_hashes": [
"305469386172568607995090889127400499800",
"164748909009527016058299342589249192028",
"74505882255080775097042379243447366500",
"321822967609217144650500439140456360480"
]
},
"deprecated": false,
"signature_type": "Line",
"id": "CVE-2020-1899-e2430ba7",
"signature_version": "v1",
"source": "https://github.com/facebook/hhvm/commit/1107228a5128d3ca1c4add8ac1635d933cbbe2e9",
"target": {
"file": "hphp/runtime/base/variable-unserializer.cpp"
}
}
]