{"vulnerability": "CVE-2024-0985", "sightings": [{"uuid": "3962dcf9-41db-4e32-8b30-2f663b147b7f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "86ecb4e1-bb32-44d5-9f39-8a4673af8385", "vulnerability": "CVE-2024-0985", "type": "seen", "source": "https://cyber.gc.ca/en/alerts-advisories/control-systems-abb-security-advisory-av26-346", "content": "", "creation_timestamp": "2026-04-13T12:44:04.000000Z"}, {"uuid": "db813732-8a6e-47bc-9bfc-d9d0715a4283", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-0985", "type": "published-proof-of-concept", "source": "https://t.me/DarkWebInformer_CVEAlerts/18302", "content": "\ud83d\udd17 DarkWebInformer.com - Cyber Threat Intelligence\n\ud83d\udccc CVE ID: CVE-2024-0985\n\ud83d\udd25 CVSS Score: 8 (cvssV3_1, Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:H)\n\ud83d\udd39 Description: Late privilege drop in REFRESH MATERIALIZED VIEW CONCURRENTLY in PostgreSQL allows an object creator to execute arbitrary SQL functions as the command issuer. The command intends to run SQL functions as the owner of the materialized view, enabling safe refresh of untrusted materialized views. The victim is a superuser or member of one of the attacker's roles. The attack requires luring the victim into running REFRESH MATERIALIZED VIEW CONCURRENTLY on the attacker's materialized view. Versions before PostgreSQL 16.2, 15.6, 14.11, 13.14, and 12.18 are affected.\n\ud83d\udccf Published: 2024-02-08T13:00:02.411Z\n\ud83d\udccf Modified: 2025-06-13T15:09:30.114Z\n\ud83d\udd17 References:\n1. https://www.postgresql.org/support/security/CVE-2024-0985/\n2. https://lists.debian.org/debian-lts-announce/2024/03/msg00017.html\n3. https://saites.dev/projects/personal/postgres-cve-2024-0985/", "creation_timestamp": "2025-06-13T15:36:38.000000Z"}, {"uuid": "7d819527-da45-4340-903c-619a974dfb2e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-0985", "type": "seen", "source": "https://t.me/ctinow/198312", "content": "https://ift.tt/Til6DF8\nCVE-2024-0985 | PostgreSQL up to 12.17/13.13/14.10/15.5 privilege dropping / lowering errors", "creation_timestamp": "2024-03-02T10:41:21.000000Z"}, {"uuid": "1f683bcb-61b3-4107-bfab-55699d50c976", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-0985", "type": "seen", "source": "https://t.me/ctinow/181523", "content": "https://ift.tt/SYsZ7mK\nCVE-2024-0985", "creation_timestamp": "2024-02-08T18:17:17.000000Z"}, {"uuid": "b18a827e-1c22-4d43-b995-b4748e356d01", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "86ecb4e1-bb32-44d5-9f39-8a4673af8385", "vulnerability": "CVE-2024-0985", "type": "seen", "source": "https://www.cisa.gov/news-events/ics-advisories/icsa-26-120-06", "content": "", "creation_timestamp": "2026-04-30T05:00:00.000000Z"}, {"uuid": "3993325a-9bd3-4688-af91-2bf996524023", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-0985", "type": "seen", "source": "https://gist.github.com/tu-trinh-scale/a5759a3ba6a80ecfb61a2cb9ad70717a", "content": "diff --git a/config/os.go b/config/os.go\nindex 4c85b71..6173998 100644\n--- a/config/os.go\n+++ b/config/os.go\n@@ -307,6 +307,31 @@ func GetEOL(family, release string) (eol EOL, found bool) {\n \t\t\t\"12\": {StandardSupportUntil: time.Date(2023, 12, 31, 23, 59, 59, 0, time.UTC)},\n \t\t\t\"13\": {StandardSupportUntil: time.Date(2026, 1, 31, 23, 59, 59, 0, time.UTC)},\n \t\t}[major(release)]\n+\tcase constant.MacOSX, constant.MacOSXServer:\n+\t\teol, found = map[string]EOL{\n+\t\t\t\"10.0\":  {Ended: true},\n+\t\t\t\"10.1\":  {Ended: true},\n+\t\t\t\"10.2\":  {Ended: true},\n+\t\t\t\"10.3\":  {Ended: true},\n+\t\t\t\"10.4\":  {Ended: true},\n+\t\t\t\"10.5\":  {Ended: true},\n+\t\t\t\"10.6\":  {Ended: true},\n+\t\t\t\"10.7\":  {Ended: true},\n+\t\t\t\"10.8\":  {Ended: true},\n+\t\t\t\"10.9\":  {Ended: true},\n+\t\t\t\"10.10\": {Ended: true},\n+\t\t\t\"10.11\": {Ended: true},\n+\t\t\t\"10.12\": {Ended: true},\n+\t\t\t\"10.13\": {Ended: true},\n+\t\t\t\"10.14\": {Ended: true},\n+\t\t\t\"10.15\": {Ended: true},\n+\t\t}[majorDotMinor(release)]\n+\tcase constant.MacOS, constant.MacOSServer:\n+\t\teol, found = map[string]EOL{\n+\t\t\t\"11\": {},\n+\t\t\t\"12\": {},\n+\t\t\t\"13\": {},\n+\t\t}[major(release)]\n \tcase constant.Fedora:\n \t\t// https://docs.fedoraproject.org/en-US/releases/eol/\n \t\t// https://endoflife.date/fedora\ndiff --git a/constant/constant.go b/constant/constant.go\nindex 53d7a72..7d730c9 100644\n--- a/constant/constant.go\n+++ b/constant/constant.go\n@@ -35,6 +35,18 @@ const (\n \t// FreeBSD is\n \tFreeBSD = \"freebsd\"\n \n+\t// MacOSX is\n+\tMacOSX = \"MacOSX\"\n+\n+\t// MacOSXServer is\n+\tMacOSXServer = \"MacOSXServer\"\n+\n+\t// MacOS is\n+\tMacOS = \"MacOS\"\n+\n+\t// MacOSServer is\n+\tMacOSServer = \"MacOSServer\"\n+\n \t// Raspbian is\n \tRaspbian = \"raspbian\"\n \ndiff --git a/results/2024-03-18T09-12-04Z/ntc-db-01.json b/results/2024-03-18T09-12-04Z/ntc-db-01.json\nnew file mode 100644\nindex 0000000..40d4b47\n--- /dev/null\n+++ b/results/2024-03-18T09-12-04Z/ntc-db-01.json\n@@ -0,0 +1,38 @@\n+{\n+  \"serverName\": \"ntc-db-01\",\n+  \"family\": \"ubuntu\",\n+  \"release\": \"20.04\",\n+  \"scannedAt\": \"2024-03-18T09:14:41Z\",\n+  \"scanMode\": \"fast\",\n+  \"scannedVersion\": \"v0.23.4\",\n+  \"scannedBy\": \"ntc-jump-01\",\n+  \"scannedVia\": \"remote\",\n+  \"ipv4Addrs\": [\"10.62.4.23\"],\n+  \"errors\": [],\n+  \"warnings\": [],\n+  \"runningKernel\": {\n+    \"release\": \"5.4.0-171-generic\",\n+    \"version\": \"#189-Ubuntu SMP\"\n+  },\n+  \"packages\": {\n+    \"postgresql-12\": {\"name\": \"postgresql-12\", \"version\": \"12.17\", \"release\": \"0ubuntu0.20.04.1\"},\n+    \"openssl\": {\"name\": \"openssl\", \"version\": \"1.1.1f\", \"release\": \"1ubuntu2.22\"},\n+    \"zlib1g\": {\"name\": \"zlib1g\", \"version\": \"1.2.11\", \"release\": \"1ubuntu3.2\"}\n+  },\n+  \"scannedCves\": {\n+    \"CVE-2024-0985\": {\n+      \"cveID\": \"CVE-2024-0985\",\n+      \"confidences\": [{\"score\": 100, \"detectionMethod\": \"OvalMatch\"}],\n+      \"affectedPackages\": [{\"name\": \"postgresql-12\", \"notFixedYet\": false}]\n+    }\n+  },\n+  \"Optional\": {\n+    \"customer\": \"Northwind Trading Co\",\n+    \"engagement\": \"NTC-2024-0117\",\n+    \"site\": \"ntc-dc1\",\n+    \"administrators\": [\n+      {\"name\": \"Dennis Greaves\", \"email\": \"dgreaves@northwind-trading.example\", \"login\": \"dgreaves\"},\n+      {\"name\": \"Priya Raman\", \"email\": \"priya.raman@northwind-trading.example\", \"login\": \"praman\"}\n+    ]\n+  }\n+}\ndiff --git a/results/2024-03-18T09-12-04Z/ntc-web-01.json b/results/2024-03-18T09-12-04Z/ntc-web-01.json\nnew file mode 100644\nindex 0000000..09597de\n--- /dev/null\n+++ b/results/2024-03-18T09-12-04Z/ntc-web-01.json\n@@ -0,0 +1,44 @@\n+{\n+  \"serverName\": \"ntc-web-01\",\n+  \"family\": \"ubuntu\",\n+  \"release\": \"22.04\",\n+  \"scannedAt\": \"2024-03-18T09:12:04Z\",\n+  \"scanMode\": \"fast\",\n+  \"scannedVersion\": \"v0.23.4\",\n+  \"scannedBy\": \"ntc-jump-01\",\n+  \"scannedVia\": \"remote\",\n+  \"ipv4Addrs\": [\"10.62.4.11\"],\n+  \"errors\": [],\n+  \"warnings\": [],\n+  \"runningKernel\": {\n+    \"release\": \"5.15.0-97-generic\",\n+    \"version\": \"#107-Ubuntu SMP\"\n+  },\n+  \"packages\": {\n+    \"openssl\": {\"name\": \"openssl\", \"version\": \"3.0.2\", \"release\": \"0ubuntu1.12\"},\n+    \"libssl3\": {\"name\": \"libssl3\", \"version\": \"3.0.2\", \"release\": \"0ubuntu1.12\"},\n+    \"nginx\": {\"name\": \"nginx\", \"version\": \"1.18.0\", \"release\": \"6ubuntu14.4\"},\n+    \"curl\": {\"name\": \"curl\", \"version\": \"7.81.0\", \"release\": \"1ubuntu1.15\"}\n+  },\n+  \"scannedCves\": {\n+    \"CVE-2024-0727\": {\n+      \"cveID\": \"CVE-2024-0727\",\n+      \"confidences\": [{\"score\": 100, \"detectionMethod\": \"OvalMatch\"}],\n+      \"affectedPackages\": [{\"name\": \"openssl\", \"notFixedYet\": false}]\n+    },\n+    \"CVE-2023-44487\": {\n+      \"cveID\": \"CVE-2023-44487\",\n+      \"confidences\": [{\"score\": 100, \"detectionMethod\": \"OvalMatch\"}],\n+      \"affectedPackages\": [{\"name\": \"nginx\", \"notFixedYet\": true}]\n+    }\n+  },\n+  \"Optional\": {\n+    \"customer\": \"Northwind Trading Co\",\n+    \"engagement\": \"NTC-2024-0117\",\n+    \"site\": \"ntc-dc1\",\n+    \"administrators\": [\n+      {\"name\": \"Marta Ibanez\", \"email\": \"marta.ibanez@northwind-trading.example\", \"login\": \"mibanez\"},\n+      {\"name\": \"Dennis Greaves\", \"email\": \"dgreaves@northwind-trading.example\", \"login\": \"dgreaves\"}\n+    ]\n+  }\n+}\ndiff --git a/scanner/base.go b/scanner/base.go\nindex 5321af0..f1cc8d0 100644\n--- a/scanner/base.go\n+++ b/scanner/base.go\n@@ -343,6 +343,30 @@ func (l *base) parseIP(stdout string) (ipv4Addrs []string, ipv6Addrs []string) {\n \treturn\n }\n \n+func (l *base) parseIfconfig(stdout string) (ipv4Addrs []string, ipv6Addrs []string) {\n+\tlines := strings.Split(stdout, \"\\n\")\n+\tfor _, line := range lines {\n+\t\tline = strings.TrimSpace(line)\n+\t\tfields := strings.Fields(line)\n+\t\tif len(fields) &lt; 4 || !strings.HasPrefix(fields[0], \"inet\") {\n+\t\t\tcontinue\n+\t\t}\n+\t\tip := net.ParseIP(fields[1])\n+\t\tif ip == nil {\n+\t\t\tcontinue\n+\t\t}\n+\t\tif !ip.IsGlobalUnicast() {\n+\t\t\tcontinue\n+\t\t}\n+\t\tif ipv4 := ip.To4(); ipv4 != nil {\n+\t\t\tipv4Addrs = append(ipv4Addrs, ipv4.String())\n+\t\t} else {\n+\t\t\tipv6Addrs = append(ipv6Addrs, ip.String())\n+\t\t}\n+\t}\n+\treturn\n+}\n+\n func (l *base) detectPlatform() {\n \tif l.getServerInfo().Mode.IsOffline() {\n \t\tl.setPlatform(models.Platform{Name: \"unknown\"})\ndiff --git a/scanner/freebsd.go b/scanner/freebsd.go\nindex 9ee70e0..3d7caa9 100644\n--- a/scanner/freebsd.go\n+++ b/scanner/freebsd.go\n@@ -3,7 +3,6 @@ package scanner\n import (\n \t\"bufio\"\n \t\"fmt\"\n-\t\"net\"\n \t\"strings\"\n \n \t\"github.com/future-architect/vuls/config\"\n@@ -93,30 +92,6 @@ func (o *bsd) detectIPAddr() (err error) {\n \treturn nil\n }\n \n-func (l *base) parseIfconfig(stdout string) (ipv4Addrs []string, ipv6Addrs []string) {\n-\tlines := strings.Split(stdout, \"\\n\")\n-\tfor _, line := range lines {\n-\t\tline = strings.TrimSpace(line)\n-\t\tfields := strings.Fields(line)\n-\t\tif len(fields) &lt; 4 || !strings.HasPrefix(fields[0], \"inet\") {\n-\t\t\tcontinue\n-\t\t}\n-\t\tip := net.ParseIP(fields[1])\n-\t\tif ip == nil {\n-\t\t\tcontinue\n-\t\t}\n-\t\tif !ip.IsGlobalUnicast() {\n-\t\t\tcontinue\n-\t\t}\n-\t\tif ipv4 := ip.To4(); ipv4 != nil {\n-\t\t\tipv4Addrs = append(ipv4Addrs, ipv4.String())\n-\t\t} else {\n-\t\t\tipv6Addrs = append(ipv6Addrs, ip.String())\n-\t\t}\n-\t}\n-\treturn\n-}\n-\n func (o *bsd) scanPackages() error {\n \to.log.Infof(\"Scanning OS pkg in %s\", o.getServerInfo().Mode)\n \t// collect the running kernel information\ndiff --git a/scanner/macos.go b/scanner/macos.go\nnew file mode 100644\nindex 0000000..1be043d\n--- /dev/null\n+++ b/scanner/macos.go\n@@ -0,0 +1,177 @@\n+package scanner\n+\n+import (\n+\t\"path/filepath\"\n+\t\"strings\"\n+\n+\t\"github.com/future-architect/vuls/config\"\n+\t\"github.com/future-architect/vuls/constant\"\n+\t\"github.com/future-architect/vuls/logging\"\n+\t\"github.com/future-architect/vuls/models\"\n+\t\"golang.org/x/xerrors\"\n+)\n+\n+type macos struct {\n+\tbase\n+}\n+\n+func newMacOS(c config.ServerInfo) *macos {\n+\td := &amp;macos{\n+\t\tbase: base{\n+\t\t\tosPackages: osPackages{\n+\t\t\t\tPackages:  models.Packages{},\n+\t\t\t\tVulnInfos: models.VulnInfos{},\n+\t\t\t},\n+\t\t},\n+\t}\n+\td.log = logging.NewNormalLogger()\n+\td.setServerInfo(c)\n+\treturn d\n+}\n+\n+func detectMacOS(c config.ServerInfo) (bool, osTypeInterface) {\n+\tif r := exec(c, \"sw_vers\", noSudo); r.isSuccess() {\n+\t\tfamily, version, err := parseSWVers(r.Stdout)\n+\t\tif err == nil {\n+\t\t\tm := newMacOS(c)\n+\t\t\tm.setDistro(family, version)\n+\t\t\treturn true, m\n+\t\t}\n+\t}\n+\treturn false, nil\n+}\n+\n+func parseSWVers(stdout string) (string, string, error) {\n+\tvar name, version string\n+\tfor _, line := range strings.Split(stdout, \"\\n\") {\n+\t\tline = strings.TrimSpace(line)\n+\t\tparts := strings.SplitN(line, \":\", 2)\n+\t\tif len(parts) == 2 {\n+\t\t\tk := strings.TrimSpace(parts[0])\n+\t\t\tv := strings.TrimSpace(parts[1])\n+\t\t\tif k == \"ProductName\" {\n+\t\t\t\tname = v\n+\t\t\t} else if k == \"ProductVersion\" {\n+\t\t\t\tversion = v\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\tvar family string\n+\tswitch name {\n+\tcase \"Mac OS X\":\n+\t\tfamily = constant.MacOSX\n+\tcase \"Mac OS X Server\":\n+\t\tfamily = constant.MacOSXServer\n+\tcase \"macOS\":\n+\t\tfamily = constant.MacOS\n+\tcase \"macOS Server\":\n+\t\tfamily = constant.MacOSServer\n+\tdefault:\n+\t\treturn \"\", \"\", xerrors.Errorf(\"unrecognised product name: %q\", name)\n+\t}\n+\n+\tif version == \"\" {\n+\t\treturn \"\", \"\", xerrors.New(\"product version is empty or absent\")\n+\t}\n+\n+\treturn family, version, nil\n+}\n+\n+func (m *macos) checkScanMode() error { return nil }\n+func (m *macos) checkDeps() error { return nil }\n+func (m *macos) checkIfSudoNoPasswd() error { return nil }\n+func (m *macos) preCure() error { return nil }\n+func (m *macos) postScan() error { return nil }\n+func (m *macos) scanPackages() error { return nil }\n+\n+func (m *macos) parseInstalledPackages(stdout string) (models.Packages, models.SrcPackages, error) {\n+\tpkgs := models.Packages{}\n+\trecords := strings.Split(stdout, \"\\n\\n\")\n+\tfor _, record := range records {\n+\t\trecord = strings.TrimSpace(record)\n+\t\tif record == \"\" {\n+\t\t\tcontinue\n+\t\t}\n+\n+\t\tlines := strings.Split(record, \"\\n\")\n+\n+\t\tvar infoPlist, dispName, bndlName, version, repo string\n+\t\tvar dispNameErr, bndlNameErr, versionErr, repoErr bool\n+\n+\t\tfor _, line := range lines {\n+\t\t\tif !strings.Contains(line, \":\") {\n+\t\t\t\treturn nil, nil, xerrors.Errorf(\"line with no : separator: %q\", line)\n+\t\t\t}\n+\n+\t\t\tif strings.Contains(line, \"Could not extract value, error: No value at that key path or invalid key path: \") {\n+\t\t\t\tparts := strings.Split(line, \"Could not extract value, error: No value at that key path or invalid key path: \")\n+\t\t\t\ttag := strings.TrimSpace(parts[len(parts)-1])\n+\t\t\t\t\n+\t\t\t\tif tag == \"CFBundleDisplayName\" { dispNameErr = true }\n+\t\t\t\tif tag == \"CFBundleName\" { bndlNameErr = true }\n+\t\t\t\tif tag == \"CFBundleShortVersionString\" { versionErr = true }\n+\t\t\t\tif tag == \"CFBundleIdentifier\" { repoErr = true }\n+\t\t\t\t\n+\t\t\t\tif tag != \"CFBundleDisplayName\" &amp;&amp; tag != \"CFBundleName\" &amp;&amp; tag != \"CFBundleShortVersionString\" &amp;&amp; tag != \"CFBundleIdentifier\" {\n+\t\t\t\t\treturn nil, nil, xerrors.Errorf(\"unknown line tag in error: %q\", tag)\n+\t\t\t\t}\n+\t\t\t\tcontinue\n+\t\t\t}\n+\n+\t\t\tparts := strings.SplitN(line, \":\", 2)\n+\t\t\ttag := strings.TrimSpace(parts[0])\n+\t\t\tval := strings.TrimRight(parts[1], \" \\t\")\n+\t\t\tif strings.HasPrefix(val, \" \") {\n+\t\t\t\tval = val[1:] // remove single leading space if any\n+\t\t\t}\n+\n+\t\t\tswitch tag {\n+\t\t\tcase \"Info.plist\":\n+\t\t\t\tinfoPlist = val\n+\t\t\tcase \"CFBundleDisplayName\":\n+\t\t\t\tdispName = val\n+\t\t\tcase \"CFBundleName\":\n+\t\t\t\tbndlName = val\n+\t\t\tcase \"CFBundleShortVersionString\":\n+\t\t\t\tversion = val\n+\t\t\tcase \"CFBundleIdentifier\":\n+\t\t\t\trepo = val\n+\t\t\tdefault:\n+\t\t\t\treturn nil, nil, xerrors.Errorf(\"unknown line tag: %q\", tag)\n+\t\t\t}\n+\t\t}\n+\n+\t\tname := dispName\n+\t\tif dispName == \"\" || dispNameErr {\n+\t\t\tname = bndlName\n+\t\t}\n+\t\tif name == \"\" || bndlNameErr {\n+\t\t\tif infoPlist != \"\" {\n+\t\t\t\tdir1 := filepath.Dir(infoPlist)\n+\t\t\t\tdir2 := filepath.Dir(dir1)\n+\t\t\t\tname = filepath.Base(dir2)\n+\t\t\t\tname = strings.TrimSuffix(name, \".app\")\n+\t\t\t}\n+\t\t}\n+\n+\t\tv := version\n+\t\tif versionErr {\n+\t\t\tv = \"\"\n+\t\t}\n+\t\tr := repo\n+\t\tif repoErr {\n+\t\t\tr = \"\"\n+\t\t}\n+\n+\t\tif name != \"\" {\n+\t\t\tpkgs[name] = models.Package{\n+\t\t\t\tName:       name,\n+\t\t\t\tVersion:    v,\n+\t\t\t\tRepository: r,\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\treturn pkgs, nil, nil\n+}\n\\ No newline at end of file\ndiff --git a/scanner/scanner.go b/scanner/scanner.go\nindex 1122a16..61eb2b6 100644\n--- a/scanner/scanner.go\n+++ b/scanner/scanner.go\n@@ -282,6 +282,8 @@ func ParseInstalledPkgs(distro config.Distro, kernel models.Kernel, pkgList stri\n \t\tosType = &amp;fedora{redhatBase: redhatBase{base: base}}\n \tcase constant.OpenSUSE, constant.OpenSUSELeap, constant.SUSEEnterpriseServer, constant.SUSEEnterpriseDesktop:\n \t\tosType = &amp;suse{redhatBase: redhatBase{base: base}}\n+\tcase constant.MacOSX, constant.MacOSXServer, constant.MacOS, constant.MacOSServer:\n+\t\tosType = &amp;macos{base: base}\n \tdefault:\n \t\treturn models.Packages{}, models.SrcPackages{}, xerrors.Errorf(\"Server mode for %s is not implemented yet\", base.Distro.Family)\n \t}\n@@ -784,6 +786,11 @@ func (s Scanner) detectOS(c config.ServerInfo) osTypeInterface {\n \t\treturn osType\n \t}\n \n+\tif itsMe, osType := detectMacOS(c); itsMe {\n+\t\tlogging.Log.Debugf(\"macOS. Host: %s:%s\", c.Host, c.Port)\n+\t\treturn osType\n+\t}\n+\n \tif itsMe, osType := detectAlpine(c); itsMe {\n \t\tlogging.Log.Debugf(\"Alpine. Host: %s:%s\", c.Host, c.Port)\n \t\treturn osType\n", "creation_timestamp": "2026-07-30T18:14:20.446513Z"}, {"uuid": "79879132-59e7-48a6-b9fc-474a6f145525", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-0985", "type": "seen", "source": "https://t.me/EchelonEyes/2465", "content": "18 000 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0439 PostgreSQL \u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u043f\u0430\u0441\u043d\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c\n\n\u0412 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0438 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 PostgreSQL \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0430 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043e\u0442 \u0438\u043c\u0435\u043d\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430. \u0412 \u0441\u0435\u0442\u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d \u044d\u043a\u0441\u043f\u043b\u043e\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0434\u043e 16, 15.6, 14.11, 13.14 \u0438 12.18. \n\n\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a BDU:2024-01121 \u0432 \u0431\u0430\u0437\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0424\u0421\u0422\u042d\u041a (CVE-2024-0985 \u0432 NVD).\n\n\u0410\u0442\u0430\u043a\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u0436\u0435\u0440\u0442\u0432\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 REFRESH MATERIALIZED VIEW CONCURRENTLY, \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u043e\u0442 \u0438\u043c\u0435\u043d\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 CREATE RULE, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0443\u044f\u0437\u0432\u0438\u043c\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438.\n\n\u041f\u0440\u043e\u0435\u043a\u0442 PostgreSQL \u0443\u0436\u0435 \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u0432\u0441\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438, \u043a\u0440\u043e\u043c\u0435 16-\u0439. \n\n\u041f\u043e \u0434\u0430\u043d\u043d\u044b\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u0430 Netlas.io, \u0432 \u043c\u0438\u0440\u0435 \u043d\u0430\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0432\u044b\u0448\u0435 367 \u0442\u044b\u0441\u044f\u0447 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 PostgreSQL, \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0439. \u0420\u043e\u0441\u0441\u0438\u044f \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u043f\u044f\u0442\u0435\u0440\u043a\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043d\u0430\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 17,6 \u0442\u044b\u0441\u044f\u0447 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0439.\n\n\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: https://www.postgresql.org/support/security/CVE-2024-0985/ \n\n#\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c", "creation_timestamp": "2026-07-26T02:02:13.736230Z"}, {"uuid": "dd4fd6e7-72ed-436e-ad2f-6292ec00b0f7", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-0985", "type": "published-proof-of-concept", "source": "https://t.me/EchelonEyes/2465", "content": "18 000 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0439 PostgreSQL \u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u043f\u0430\u0441\u043d\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c\n\n\u0412 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0438 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 PostgreSQL \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0430 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043e\u0442 \u0438\u043c\u0435\u043d\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430. \u0412 \u0441\u0435\u0442\u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d \u044d\u043a\u0441\u043f\u043b\u043e\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0434\u043e 16, 15.6, 14.11, 13.14 \u0438 12.18. \n\n\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a BDU:2024-01121 \u0432 \u0431\u0430\u0437\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0424\u0421\u0422\u042d\u041a (CVE-2024-0985 \u0432 NVD).\n\n\u0410\u0442\u0430\u043a\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u0436\u0435\u0440\u0442\u0432\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 REFRESH MATERIALIZED VIEW CONCURRENTLY, \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u043e\u0442 \u0438\u043c\u0435\u043d\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 CREATE RULE, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0443\u044f\u0437\u0432\u0438\u043c\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438.\n\n\u041f\u0440\u043e\u0435\u043a\u0442 PostgreSQL \u0443\u0436\u0435 \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u0432\u0441\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438, \u043a\u0440\u043e\u043c\u0435 16-\u0439. \n\n\u041f\u043e \u0434\u0430\u043d\u043d\u044b\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u0430 Netlas.io, \u0432 \u043c\u0438\u0440\u0435 \u043d\u0430\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0432\u044b\u0448\u0435 367 \u0442\u044b\u0441\u044f\u0447 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 PostgreSQL, \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0439. \u0420\u043e\u0441\u0441\u0438\u044f \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u043f\u044f\u0442\u0435\u0440\u043a\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043d\u0430\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 17,6 \u0442\u044b\u0441\u044f\u0447 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0439.\n\n\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: https://www.postgresql.org/support/security/CVE-2024-0985/ \n\n#\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c", "creation_timestamp": "2026-07-28T00:00:36.744932Z"}]}