{"vulnerability": "CVE-2023-46604", "sightings": [{"uuid": "d6fb12fa-298f-4062-9b30-18e9c2a4c0b4", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "MISP/8a5d9ef7-0fae-4fcc-a606-d3701ec5f0e0", "content": "", "creation_timestamp": "2024-10-15T11:38:27.000000Z"}, {"uuid": "5d520b7b-5ec1-45c8-9cba-65069dd8126f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "MISP/f9c19fe0-d99a-4345-8423-5635b5d8bf1f", "content": "", "creation_timestamp": "2023-11-01T20:42:27.000000Z"}, {"uuid": "caa3345f-4163-4fcd-8e51-be24e017e2ef", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "MISP/3c19819c-1dac-4ef2-bfed-be5efa7e0123", "content": "", "creation_timestamp": "2023-11-02T18:10:02.000000Z"}, {"uuid": "ac266326-2d62-49b7-88f1-e59d7b6d90c5", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "MISP/df7b7020-9f17-4a3c-9824-1baa4ff67cb1", "content": "", "creation_timestamp": "2023-11-22T15:35:26.000000Z"}, {"uuid": "cdeee833-383a-490a-820b-968f9dfcdbeb", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "MISP/aaf97b2c-ad16-4ce6-928a-a440112d0fd3", "content": "", "creation_timestamp": "2024-09-16T19:13:31.000000Z"}, {"uuid": "5f7956fd-fdd1-49f2-be9d-64948ed8fe44", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://infosec.exchange/users/edwardk/statuses/113625512128034806", "content": "", "creation_timestamp": "2024-12-09T23:42:02.020231Z"}, {"uuid": "3a900e42-25b9-43bb-bb9b-e4c253d0bae0", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://feedsin.space/feed/CISAKevBot/items/2971911", "content": "", "creation_timestamp": "2024-12-24T20:35:32.844833Z"}, {"uuid": "d092f13b-e258-4618-87c9-7c7243c1fe43", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "MISP/a1e796df-2ad8-4c8d-8b69-737a004e72dd", "content": "", "creation_timestamp": "2025-02-06T03:13:46.000000Z"}, {"uuid": "36f67344-774f-40d1-8764-65a50ab87b3f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "MISP/a1e796df-2ad8-4c8d-8b69-737a004e72dd", "content": "", "creation_timestamp": "2025-02-23T04:10:57.000000Z"}, {"uuid": "be3f9683-efb8-440f-8f7a-946bbacc7e43", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://www.cisa.gov/news-events/ics-advisories/icsa-25-044-14", "content": "", "creation_timestamp": "2025-02-13T11:00:00.000000Z"}, {"uuid": "c59e7962-9ae4-4a34-8258-abd007e84d2c", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "MISP/3c19819c-1dac-4ef2-bfed-be5efa7e0123", "content": "", "creation_timestamp": "2025-02-23T02:10:48.000000Z"}, {"uuid": "0dce2cf2-9d97-4aca-b426-3217d5c06dd5", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "MISP/a9d21043-f825-4bac-8d2b-56fb9e8343e7", "content": "", "creation_timestamp": "2025-10-23T21:13:01.000000Z"}, {"uuid": "ce6458dd-7726-4120-aa44-6c8c980ad32b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://gist.github.com/vivek-gopal/7c15a28070e3b6b75c8127f632686585", "content": "", "creation_timestamp": "2025-09-11T08:37:25.000000Z"}, {"uuid": "f609efb1-461f-4380-aa93-8dd5249261ae", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://gist.github.com/vivek-gopal/3ea5712720c8371a1075b15a27628fc7", "content": "", "creation_timestamp": "2025-09-11T09:20:51.000000Z"}, {"uuid": "e42f3999-d55b-4635-98f6-62d4c6f10715", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://bsky.app/profile/infosec.skyfleet.blue/post/3m4p6en3vwv2i", "content": "", "creation_timestamp": "2025-11-03T04:23:53.863456Z"}, {"uuid": "f8accf45-e523-4b0c-88c2-a42d184f4780", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "cve-2023-46604", "type": "seen", "source": "https://bsky.app/profile/jos1264.social.skynetcloud.site.ap.brid.gy/post/3m4pcnddwi4e2", "content": "", "creation_timestamp": "2025-11-03T05:41:04.380520Z"}, {"uuid": "f0b1b462-cc99-47a5-b1ec-0eb0d6926df1", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://poliverso.org/objects/0477a01e-34f40802-640c8f06861ca21f", "content": "", "creation_timestamp": "2025-08-20T09:25:27.869166Z"}, {"uuid": "4c36b6c9-fdd5-4a34-9577-53f3c0455de1", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://bsky.app/profile/linux.activitypub.awakari.com.ap.brid.gy/post/3lwt5qswy2mg2", "content": "", "creation_timestamp": "2025-08-20T09:52:32.957697Z"}, {"uuid": "1d172c7f-e738-4081-a05b-047bded7c1ce", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://bsky.app/profile/undercodenews.bsky.social/post/3lwtbvy64gh2m", "content": "", "creation_timestamp": "2025-08-20T11:06:45.997719Z"}, {"uuid": "ece54dfc-9f67-4633-8a45-b0f2299d71e9", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://infosec.exchange/users/dragonjar/statuses/115060796380277759", "content": "", "creation_timestamp": "2025-08-20T11:13:43.773609Z"}, {"uuid": "45e624d3-d2f0-46f9-9f68-f737eec0affc", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://bsky.app/profile/theitnerd.ca/post/3lwtgu6hk3w2k", "content": "", "creation_timestamp": "2025-08-20T12:35:14.281196Z"}, {"uuid": "174ea819-057c-48fe-aa85-070ce8a3a851", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://bsky.app/profile/securityrss.bsky.social/post/3lwtls2o6fs2y", "content": "", "creation_timestamp": "2025-08-20T14:03:32.750593Z"}, {"uuid": "63272c1b-6a3f-4ac6-a75a-5e20cee0bb6d", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://bsky.app/profile/thedailytechfeed.com/post/3lwtuzyxlkk24", "content": "", "creation_timestamp": "2025-08-20T16:49:06.759023Z"}, {"uuid": "d71c2e5b-f65f-48a5-815a-d7d4f172118d", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://bsky.app/profile/r-blueteamsec.bsky.social/post/3lwubwihyzu26", "content": "", "creation_timestamp": "2025-08-20T20:39:42.719908Z"}, {"uuid": "ee490ecd-b29c-4c5a-b4dd-08455358aca6", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://bsky.app/profile/kpwn.bsky.social/post/3lwuep3pnik2b", "content": "", "creation_timestamp": "2025-08-20T21:29:16.348690Z"}, {"uuid": "07176288-9b45-4f89-a2d3-aa506d131fb5", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://bsky.app/profile/kpwn.bsky.social/post/3lwufb4hxzs2b", "content": "", "creation_timestamp": "2025-08-20T21:39:20.782919Z"}, {"uuid": "4d8178cd-d04b-4fef-8ce9-74bd37956ca7", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://bsky.app/profile/linux.activitypub.awakari.com.ap.brid.gy/post/3lwwgbbfhqhi2", "content": "", "creation_timestamp": "2025-08-21T17:03:03.658278Z"}, {"uuid": "4202631e-ed8c-4157-a3a8-e88a8a510a04", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "MISP/4ad9ed67-5cc3-5de2-849d-1a1910431785", "content": "", "creation_timestamp": "2025-09-09T11:33:07.000000Z"}, {"uuid": "fad902d7-3732-4314-b193-5656d2996567", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://bsky.app/profile/ytroncal.bsky.social/post/3lx7jiyqjxk2e", "content": "", "creation_timestamp": "2025-08-25T07:54:44.125789Z"}, {"uuid": "ffadccef-4bd5-46db-bb0a-fcbfeb6d7d33", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "MISP/d17bd6ef-d68b-317b-ac33-cdbc44c5fc57", "content": "", "creation_timestamp": "2025-08-31T03:12:57.000000Z"}, {"uuid": "db3dd172-d6a3-4d1e-9d13-23848988616b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://bsky.app/profile/techwithellyson.bsky.social/post/3lxsfdx55ww2w", "content": "", "creation_timestamp": "2025-09-01T20:00:48.839357Z"}, {"uuid": "c29fa324-740d-47e8-91b3-fe856a9f1a7a", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/multi/misc/apache_activemq_rce_cve_2023_46604.rb", "content": "", "creation_timestamp": "2023-11-06T15:51:49.000000Z"}, {"uuid": "21ce3c94-7bd3-4159-aca3-a274f180bf1b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://infosec.exchange/users/VirusBulletin/statuses/116125304066872153", "content": "", "creation_timestamp": "2026-02-24T11:12:08.978492Z"}, {"uuid": "37c59b3c-f1f8-466b-b029-b1b17a2ae9b8", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://bsky.app/profile/virusbtn.bsky.social/post/3mflzukjcwc2b", "content": "", "creation_timestamp": "2026-02-24T11:12:09.736439Z"}, {"uuid": "235f4024-dc7b-484d-a1bd-6ea907854989", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://bsky.app/profile/thedailytechfeed.com/post/3mfrtdlqksq2m", "content": "", "creation_timestamp": "2026-02-26T18:31:11.962774Z"}, {"uuid": "0eda1023-2246-4ea1-ba28-3714f8043d93", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://gist.github.com/alon710/259ba4448555bfe0e3eb2f75dd2e8a14", "content": "", "creation_timestamp": "2026-02-26T05:00:19.000000Z"}, {"uuid": "11bff85c-ec16-40c3-8635-698414ca9d41", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://bsky.app/profile/blackhatnews.tokyo/post/3mfonschmcw2f", "content": "", "creation_timestamp": "2026-02-25T12:14:03.205146Z"}, {"uuid": "90340260-f66a-4f70-9a42-ab7ad685faa8", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "MISP/8a5d9ef7-0fae-4fcc-a606-d3701ec5f0e0", "content": "", "creation_timestamp": "2026-01-09T20:17:30.000000Z"}, {"uuid": "45b436a4-e18c-4cc2-a2bd-4192925943b4", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "86ecb4e1-bb32-44d5-9f39-8a4673af8385", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://www.govcert.gov.hk/en/alerts_detail.php?id=1153", "content": "", "creation_timestamp": "2023-11-03T04:00:00.000000Z"}, {"uuid": "df303bac-5190-4e00-9a90-9fa53a19faf7", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "af0120d0-3dac-4a6a-974b-a9f33d2a9846", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://vulnerability.circl.lu/known-exploited-vulnerabilities-catalog/83d4f3af-eb31-483b-8893-5114f7d170fe", "content": "", "creation_timestamp": "2026-02-02T12:25:27.480574Z"}, {"uuid": "3369658a-1227-4db0-abcd-7f8eaed8cc58", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "af0120d0-3dac-4a6a-974b-a9f33d2a9846", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://vulnerability.circl.lu/known-exploited-vulnerabilities-catalog/eafa255c-065f-41f9-a401-581d793dafd1", "content": "", "creation_timestamp": "2026-02-02T12:26:47.651400Z"}, {"uuid": "bd718241-efd4-4410-88d9-380cb9e21d9a", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "Telegram/71sICJ2qduNa9p7sy7EcgNRQvBtb-VPS3HuJRrErM7o1_Kg", "content": "", "creation_timestamp": "2026-01-04T21:00:04.000000Z"}, {"uuid": "45fb7c12-8c76-4b0a-a5f9-1cb90f72f9a7", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/ap_security/199", "content": "\u2604\ufe0fCVE-2023-46604: Apache ActiveMQ RCE\n\n\u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0448\u0435\u043b\u043b-\u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 OpenWire\ud83d\udc7a\n\n\ud83d\udce3\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 PoC:\nhttps://github.com/sule01u/CVE-2023-46604\n\n#cve #rce #exploit", "creation_timestamp": "2023-11-09T13:29:46.000000Z"}, {"uuid": "b3fb2193-56d5-4171-b344-5a0436fe11b4", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/GithubRedTeam/81019", "content": "\ud83d\udea8 GitHub \u76d1\u63a7\u6d88\u606f\u63d0\u9192\n\n\ud83d\udea8 \u53d1\u73b0\u5173\u952e\u8bcd\uff1a #CVE-2026\n\n\ud83d\udce6 \u9879\u76ee\u540d\u79f0\uff1a ActiveMQ-EXPtools\n\ud83d\udc64 \u9879\u76ee\u4f5c\u8005\uff1a Catherines77\n\ud83d\udee0 \u5f00\u53d1\u8bed\u8a00\uff1a Java\n\u2b50 Star\u6570\u91cf\uff1a 0  |  \ud83c\udf74 Fork\u6570\u91cf\uff1a 0\n\ud83d\udcc5 \u66f4\u65b0\u65f6\u95f4\uff1a 2026-04-20 03:28:09\n\n\ud83d\udcdd \u9879\u76ee\u63cf\u8ff0\uff1a\n\u652f\u6301\u68c0\u6d4b\u548c\u5229\u7528ActiveMQ\u6f0f\u6d1e\uff0cCVE-2015-5254\uff0cCVE-2016-3088\uff0cCVE-2022-41678\uff0cCVE-2023-46604\uff0cCVE-2024-32114\uff0cCVE-2026-34197\n\n\ud83d\udd17 \u70b9\u51fb\u8bbf\u95ee\u9879\u76ee\u5730\u5740", "creation_timestamp": "2026-04-20T04:00:04.000000Z"}, {"uuid": "5035868e-9615-44c6-97b8-824b5632bbf7", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://bsky.app/profile/concisecyber.bsky.social/post/3mj3vrjxzxe27", "content": "", "creation_timestamp": "2026-04-09T22:56:58.925106Z"}, {"uuid": "7bc7049e-85b0-4418-af99-dca21ac9f925", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://github.com/google/tsunami-security-scanner-plugins/tree/master/community/detectors/apache_activemq_cve_2023_46604", "content": "", "creation_timestamp": "2024-01-14T16:41:59.000000Z"}, {"uuid": "5f048346-2d77-42ad-a8d3-dd73ac75459f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "Telegram/sqAkt-abxgQKI93sbGf7iG59__fxfGGzH9B3O7fITix-uxg", "content": "", "creation_timestamp": "2025-11-16T03:00:06.000000Z"}, {"uuid": "c2b82f1e-f36b-4348-9341-7b33d033f186", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/6009", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aCVE-2023\n\u63cf\u8ff0\uff1aRepository to exploit CVE-2023-46604 reported for ActiveMQ\nURL\uff1ahttps://github.com/tomasmussi-mulesoft/activemq-cve-2023-46604\n\n\u6807\u7b7e\uff1a#CVE-2023", "creation_timestamp": "2023-11-29T18:38:26.000000Z"}, {"uuid": "c68f2d9a-d2d0-4ef4-bb28-734b134cabd8", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/5771", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aRCE\n\u63cf\u8ff0\uff1aThis script leverages CVE-2023046604 (Apache ActiveMQ) to generate a pseudo shell. The vulnerability allows for remote code execution due to unsafe deserialization within the OpenWire protocol.\nURL\uff1ahttps://github.com/duck-sec/CVE-2023-46604-ActiveMQ-RCE-pseudoshell\n\n\u6807\u7b7e\uff1a#RCE", "creation_timestamp": "2023-11-12T12:18:06.000000Z"}, {"uuid": "fab783f3-eff7-45bf-b339-0832c7643d09", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/5770", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aRCE\n\u63cf\u8ff0\uff1a CVE-2023-46604 ActiveMQ RCE vulnerability verification/exploitation tool\nURL\uff1ahttps://github.com/sule01u/CVE-2023-46604\n\n\u6807\u7b7e\uff1a#RCE", "creation_timestamp": "2023-11-12T10:42:46.000000Z"}, {"uuid": "b662fdd2-d221-47ff-abe9-e91fe2604751", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/5815", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aCVE-2023\n\u63cf\u8ff0\uff1aPOC repo for CVE-2023-46604\nURL\uff1ahttps://github.com/vjayant93/CVE-2023-46604-POC\n\n\u6807\u7b7e\uff1a#CVE-2023", "creation_timestamp": "2023-11-15T19:23:04.000000Z"}, {"uuid": "60ac37e8-2f34-49a8-b0d9-8d2d04aa1772", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/5663", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aCVE-2023\n\u63cf\u8ff0\uff1aCVE-2023-46604\nURL\uff1ahttps://github.com/JaneMandy/ActiveMQ_RCE_Pro_Max\n\n\u6807\u7b7e\uff1a#CVE-2023", "creation_timestamp": "2023-11-03T14:30:55.000000Z"}, {"uuid": "e01c99e8-09dd-48f6-a4b1-3a2d4b5d51f6", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/5720", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aCVE-2023\n\u63cf\u8ff0\uff1aCVE-2023-46604 Apache ActiveMQ RCE exp\nURL\uff1ahttps://github.com/justdoit-cai/CVE-2023-46604-Apache-ActiveMQ-RCE-exp\n\n\u6807\u7b7e\uff1a#CVE-2023", "creation_timestamp": "2023-11-08T07:52:51.000000Z"}, {"uuid": "b301ef9f-b01a-4f62-815d-6152bc6c4006", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/6275", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aCVE-2023\n\u63cf\u8ff0\uff1aCVE-2023-46604 - ApacheMQ Version 5.15.5 Vulnerability  Machine: Broker\nURL\uff1ahttps://github.com/Mudoleto/Broker_ApacheMQ\n\n\u6807\u7b7e\uff1a#CVE-2023", "creation_timestamp": "2023-12-23T08:43:25.000000Z"}, {"uuid": "9278b566-e740-4ccc-98cd-4756839096c0", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/5778", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aCVE-2023\n\u63cf\u8ff0\uff1aCVE-2023-46604\u73af\u5883\u590d\u73b0\u5305\nURL\uff1ahttps://github.com/LiritoShawshark/CVE-2023-46604_ActiveMQ_RCE_Recurrence\n\n\u6807\u7b7e\uff1a#CVE-2023", "creation_timestamp": "2023-11-13T02:40:58.000000Z"}, {"uuid": "b32bdd4f-86cb-48ae-a001-5d7cb0cc853d", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/6125", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aCVE-2023\n\u63cf\u8ff0\uff1aExploit for CVE-2023-46604\nURL\uff1ahttps://github.com/mrpentst/CVE-2023-46604\n\n\u6807\u7b7e\uff1a#CVE-2023", "creation_timestamp": "2023-12-09T19:28:42.000000Z"}, {"uuid": "d534131e-9388-48bd-90d8-4c797e5ff051", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/6266", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aCVE-2023\n\u63cf\u8ff0\uff1aInstructions for exploiting vulnerabilities CVE-2021-44228 and CVE-2023-46604\nURL\uff1ahttps://github.com/dcm2406/CVE-Lab\n\n\u6807\u7b7e\uff1a#CVE-2023", "creation_timestamp": "2023-12-21T18:27:16.000000Z"}, {"uuid": "e4fe2c77-e075-4cbc-a85c-e32bf62f3de0", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/6204", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aCVE-2023\n\u63cf\u8ff0\uff1aResearch on CVE-2021-44228 and CVE-2023-46604\nURL\uff1ahttps://github.com/dcm2406/CVELab\n\n\u6807\u7b7e\uff1a#CVE-2023", "creation_timestamp": "2023-12-16T12:06:44.000000Z"}, {"uuid": "653ce06d-1c34-4206-831a-e95e158cfce8", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "Telegram/jW6gAEx0X-7rlKDcpeYmlHPMlF_kfSwPpGXtV0Ykb6N88uc", "content": "", "creation_timestamp": "2026-03-31T03:00:07.000000Z"}, {"uuid": "3a02d1e6-66f2-460f-81b4-47c241450691", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/itsec_news/3587", "content": "\u200b\u26a1\ufe0fHelloKitty \u0432\u0435\u0440\u043d\u0443\u043b\u0430\u0441\u044c: \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Apache ActiveMQ \u043f\u043e\u0434 \u0430\u0442\u0430\u043a\u043e\u0439 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043b\u044c\u0449\u0438\u043a\u043e\u0432\n\n\ud83d\udcac \u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043a\u0438\u0431\u0435\u0440\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0441\u0435\u0440\u0432\u0438\u0441\u0435 \u043e\u0431\u043c\u0435\u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 Apache ActiveMQ. \u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u043a\u043e\u0434\u0430.\n\n\u041a\u0430\u043a \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0418\u0411-\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Rapid7, \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443-\u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u043a\u0443\u043f \u0437\u0430 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0439-\u0436\u0435\u0440\u0442\u0432. \u0418\u0437\u0443\u0447\u0438\u0432 \u0437\u0430\u043c\u0435\u0442\u043a\u0443 \u043e \u0432\u044b\u043a\u0443\u043f\u0435 \u0438 \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435, \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u044b \u043f\u0440\u0438\u043f\u0438\u0441\u0430\u043b\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0443 \u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u041f\u041e HelloKitty, \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0442\u0435\u043a \u0432 \u0441\u0435\u0442\u044c \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043e\u043a\u0442\u044f\u0431\u0440\u044f.\n\n\u041e\u0442\u043c\u0435\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u0437\u043b\u043e\u043c\u044b \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 CVE-2023-46604 (CVSS 10.0), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \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 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445 Apache ActiveMQ. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0431\u044b\u043b\u0430 \u0440\u0435\u0448\u0435\u043d\u0430 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0445 ActiveMQ \u0432\u0435\u0440\u0441\u0438\u0439 5.15.16, 5.16.7, 5.17.6, \u0438\u043b\u0438 5.18.3, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u044b \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f.\n\n\u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438:\n\nApache ActiveMQ 5.18.0 \u0434\u043e 5.18.3;\nApache ActiveMQ 5.17.0 \u0434\u043e 5.17.6;\nApache ActiveMQ 5.16.0 \u0434\u043e 5.16.7;\nApache ActiveMQ \u0434\u043e \u0432\u0435\u0440\u0441\u0438\u0438 5.15.16;\nApache ActiveMQ Legacy OpenWire Module \u0441 5.18.0 \u0434\u043e 5.18.3;\nApache ActiveMQ Legacy OpenWire Module \u0441 5.17.0 \u0434\u043e 5.17.6;\nApache ActiveMQ Legacy OpenWire Module \u0441 5.16.0 \u0434\u043e 5.16.7;\nApache ActiveMQ Legacy OpenWire Module \u0441 5.8.0 \u0434\u043e 5.15.16.\n\u041f\u043e\u0441\u043b\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u0445, PoC-\u043a\u043e\u0434 \u044d\u043a\u0441\u043f\u043b\u043e\u0439\u0442\u0430 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0435\u0442\u0430\u043b\u0438 \u0431\u044b\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u043e\u0434\u043e\u0432\u0430\u043d\u044b \u0432 \u0441\u0435\u0442\u0438. \u041f\u043e \u0441\u043b\u043e\u0432\u0430\u043c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 Rapid7, \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0432 \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u0432\u0448\u0438\u0445 \u0441\u0435\u0442\u044f\u0445 \u00ab\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u043e\u0442 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 CVE-2023-46604\u00bb.\n\n\u0423\u0441\u043f\u0435\u0448\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u043e\u0439 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443 \u0444\u0430\u0439\u043b\u044b \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438 M2.png \u0438 M4.png \u0447\u0435\u0440\u0435\u0437 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a Windows (msiexec). \u041e\u0431\u0430 MSI \u0444\u0430\u0439\u043b\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 32-\u0431\u0438\u0442\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 .NET-\u0444\u0430\u0439\u043b \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c dllloader, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c EncDLL, \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0432 Base64 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0449\u0443\u044e \u043a\u0430\u043a \u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u041f\u041e. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438\u0449\u0435\u0442 \u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u043a \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u0430\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u00ab.locked\u00bb.\n\n\u041f\u043e \u0434\u0430\u043d\u043d\u044b\u043c Shadowserver Foundation, \u043f\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u043d\u0430 1 \u043d\u043e\u044f\u0431\u0440\u044f 2023 \u0433\u043e\u0434\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e 3326 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0445 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 ActiveMQ, \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u043d\u0438\u0445 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0432 \u041a\u0438\u0442\u0430\u0435, \u0421\u0428\u0410, \u0413\u0435\u0440\u043c\u0430\u043d\u0438\u0438, \u042e\u0436\u043d\u043e\u0439 \u041a\u043e\u0440\u0435\u0435 \u0438 \u0418\u043d\u0434\u0438\u0438. \u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0435\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043d\u0430\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0434\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 ActiveMQ \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0441\u0435\u0442\u0438 \u043d\u0430 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438\n\n\ud83d\udd14 ITsec NEWS", "creation_timestamp": "2023-11-02T07:33:20.000000Z"}, {"uuid": "2aa88858-b588-4c8b-a60c-61bf42b45694", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/7452", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aRCE\n\u63cf\u8ff0\uff1a CVE-2023-46604 (Apache ActiveMQ RCE Vulnerability) and focused on getting Indicators of Compromise.\nURL\uff1ahttps://github.com/mranv/honeypot.rs\n\n\u6807\u7b7e\uff1a#RCE", "creation_timestamp": "2024-05-29T15:20:18.000000Z"}, {"uuid": "8a156191-df94-4787-acc0-0cf651df2023", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/50778", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aRCE\n\u63cf\u8ff0\uff1aVulnerability Detection and Mitigation Apache ActiveMQ | Security Architectures and Systems Administration - on - Apache ActiveMQ Deserialization Remote Code Execution (RCE) \u2013 CVE-2023-46604\nURL\uff1ahttps://github.com/vaishnavucv/Project-Vuln-Detection-N-Mitigation_101\n\n\u6807\u7b7e\uff1a#RCE", "creation_timestamp": "2025-09-08T21:11:41.000000Z"}, {"uuid": "652e8844-345e-4379-a4ef-4a69ca0fc671", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/50777", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aRCE\n\u63cf\u8ff0\uff1aVulnerability Detection and Mitigation Apache ActiveMQ | Security Architectures and Systems Administration - on - Apache ActiveMQ Deserialization Remote Code Execution (RCE) \u2013 CVE-2023-46604\nURL\uff1ahttps://github.com/vaishnavucv/Project-Vuln-Detection-N-Mitigation_101\n\n\u6807\u7b7e\uff1a#RCE", "creation_timestamp": "2025-09-08T21:05:27.000000Z"}, {"uuid": "784e06b4-aa3b-4100-8495-12b00c045aec", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "Telegram/8h8Hof7StAZ6aRznwRxa4merJrUBQ8lRPVMkNJUc9vM2lk4", "content": "", "creation_timestamp": "2025-09-09T03:00:06.000000Z"}, {"uuid": "e3162a7d-f2f2-4389-bc3e-cc09b96d00d2", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/BleepingComputer/18917", "content": "\u200aKinsing malware exploits Apache ActiveMQ RCE to plant rootkits\n\nThe Kinsing malware operator is actively exploiting the CVE-2023-46604 critical vulnerability in the Apache ActiveMQ open-source message broker to compromise Linux systems. [...]\n\nhttps://www.bleepingcomputer.com/news/security/kinsing-malware-exploits-apache-activemq-rce-to-plant-rootkits/", "creation_timestamp": "2023-11-20T20:30:48.000000Z"}, {"uuid": "2e398a14-08fb-4c72-82d8-5a4dc5520c3f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/Cyber_Watch_insider/177", "content": "https://www.rapid7.com/blog/post/2023/11/01/etr-suspected-exploitation-of-apache-activemq-cve-2023-46604/", "creation_timestamp": "2023-11-02T06:01:02.000000Z"}, {"uuid": "713b0cd9-ec6e-4d25-8c7d-6bc6bf2b0ba0", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/hackyourmom/12429", "content": "\ud83d\udc7e \u0425\u0430\u043a\u0435\u0440\u0438 \u043c\u0430\u0441\u043e\u0432\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u044e\u044c\u0442\u044c Apache ActiveMQ (CVE-2023-46604) \u0456 \u0437\u0430\u043b\u0438\u0432\u0430\u044e\u0442\u044c DripDropper. \u0412\u0456\u043d \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0439, \u0445\u043e\u0432\u0430\u0454\u0442\u044c\u0441\u044f \u0437\u0430 Dropbox, \u043b\u0456\u0437\u0435 \u0432 cron \u0456 \u043c\u0456\u043d\u044f\u0454 SSH. \u041d\u0430\u0439\u0446\u0456\u043a\u0430\u0432\u0456\u0448\u0435 \u2014 \u043f\u0456\u0441\u043b\u044f \u0437\u043b\u043e\u043c\u0443 \u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0444\u0456\u0446\u0456\u0439\u043d\u0438\u0439 \u043f\u0430\u0442\u0447, \u0449\u043e\u0431 \u0437\u0430\u043a\u0440\u0438\u0442\u0438 \u0434\u0456\u0440\u0443 \u0432\u0456\u0434 \u0456\u043d\u0448\u0438\u0445. \u0421\u0435\u0440\u0432\u0435\u0440 \u0432\u0438\u0433\u043b\u044f\u0434\u0430\u0454 \u0447\u0438\u0441\u0442\u0438\u043c, \u0430\u043b\u0435 \u0432\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0456 \u0432\u0436\u0435 \u0441\u0438\u0434\u0438\u0442\u044c \u0447\u0443\u0436\u0438\u0439 \u043a\u043e\u0434 \u2139\ufe0f #cybernews", "creation_timestamp": "2025-08-20T10:13:16.000000Z"}, {"uuid": "5ee05965-8dab-4062-a682-1e322be61f05", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/TopCyberTechNews/403", "content": "Top Security News for 16/11/2023\n\nNovel espionage tool leveraged by pro-Palestinian hacking operation\nhttps://malware.news/t/novel-espionage-tool-leveraged-by-pro-palestinian-hacking-operation/75720#post_1 \n\nExecuting from Memory Using ActiveMQ CVE-2023-46604\nhttps://www.reddit.com/r/netsec/comments/17vv5rq/executing_from_memory_using_activemq_cve202346604/ \n\nRansomware review: November 2023\nhttps://www.malwarebytes.com/blog/threat-intelligence/2023/11/ransomware-review-november-2023 \n\nISC Stormcast For Thursday, November 16th, 2023 https://isc.sans.edu/podcastdetail/8748, (Thu, Nov 16th)\nhttps://isc.sans.edu/diary/rss/30406 \n\nUpload Additional Files into Active Tasks in ANY.RUN\nhttps://malware.news/t/upload-additional-files-into-active-tasks-in-any-run/75725#post_1 \n\nBolstering economic security.\nhttps://thecyberwire.com/podcasts/caveat/195/notes \n\nNew hospital cyber rules mulled in New York\nhttps://malware.news/t/new-hospital-cyber-rules-mulled-in-new-york/75723#post_1 \n\nMicrosoft unveils expansion of AI for security and security for AI at Microsoft Ignite\nhttps://www.microsoft.com/en-us/security/blog/2023/11/15/microsoft-unveils-expansion-of-ai-for-security-and-security-for-ai-at-microsoft-ignite/ \n\nA Simple Python Redirection Container for Red Team Operations\nhttps://www.reddit.com/r/netsec/comments/17vwpes/a_simple_python_redirection_container_for_red/ \n\nSentinelOne acquires Krebs Stamos Group. Radiant Security raises $15 million. RADICL secures an additional $9 million.\nhttps://thecyberwire.com/newsletters/business-briefing/5/46 \n\n    \nFollow Top Cyber News at https://t.me/TopCyberTechNews\nFeel free to DM me at https://twitter.com/ShayaFeedman", "creation_timestamp": "2023-11-16T08:00:06.000000Z"}, {"uuid": "059f503d-ae7a-4497-bfb8-d656b04d4a69", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/ap_security/250", "content": "\u2604\ufe0fCVE-2023-46604: Apache ActiveMQ RCE\n\n\u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0448\u0435\u043b\u043b-\u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 OpenWire\ud83d\udc7a\n\n\ud83d\udce3\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 PoC:\nhttps://github.com/sule01u/CVE-2023-46604\n\n#cve #rce #exploit", "creation_timestamp": "2023-11-09T13:29:46.000000Z"}, {"uuid": "3672687c-0bfb-4770-8b22-eb7035f28b2b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/bh_cat/188", "content": "\ud83d\udcd5 \u041f\u043e\u0434\u0431\u043e\u0440\u043e\u0447\u043a\u0430 \u0437\u0430 \u043d\u0435\u0434\u0435\u043b\u044e\n\n\u042d\u0442\u043e \u043f\u0440\u043e\u0431\u043d\u0438\u043a.\n\n\ud83d\udca1 F5 BIG-IP Unauth RCE via AJP Smuggling\n\n\u041e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:\nCVE-2023-46747\n\u0421\u043a\u043e\u0440\u0438\u043d\u0433 CVSS3.x:\n\u270d\ufe0f\u270d\ufe0f\u270d\ufe0f\n\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435:\n- \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u043d\u0435\u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430\u043c, \u0438\u043c\u0435\u044e\u0449\u0438\u043c \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0435 BIG-IP \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0440\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438/\u0438\u043b\u0438 \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.\nPOC\n\ud83c\udf10 \u0421\u0441\u044b\u043b\u043a\u0430\n\ud83c\udf10 \u0421\u0441\u044b\u043b\u043a\u0430\n\u27bf\u27bf\u27bf\u27bf\u27bf\u27bf\u27bf\u27bf\u27bf\u27bf\u27bf\n\n\n\ud83d\udca1 ActiveMQ Remote Code Execution\n\n\u041e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:\nCVE-2023-46604\n\u0421\u043a\u043e\u0440\u0438\u043d\u0433 CVSS3.x:\n\u270d\ufe0f\u270d\ufe0f\u270d\ufe0f\u270d\ufe0f\n\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435: \n- \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443, \u0438\u043c\u0435\u044e\u0449\u0435\u043c\u0443 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0440\u043e\u043a\u0435\u0440\u0443, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0438, \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u0438\u0440\u0443\u044f \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 OpenWire, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0431\u0440\u043e\u043a\u0435\u0440 \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u0432 \u043f\u0443\u0442\u0438 \u043a\u043b\u0430\u0441\u0441\u0430.\nPOC\n\ud83c\udf10 \u0421\u0441\u044b\u043b\u043a\u0430\n\u27bf\u27bf\u27bf\u27bf\u27bf\u27bf\u27bf\u27bf\u27bf\u27bf\u27bf\n\n\ud83d\udca1 \u041f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439 UI Cisco IOS XE\n\n\u041e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:\n- CVE-2023-20198\n\u0421\u043a\u043e\u0440\u0438\u043d\u0433 CVSS3.x: \n\u270d\ufe0f\u270d\ufe0f\u270d\ufe0f\u270d\ufe0f\n\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435:\n- \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443, \u043d\u0435 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0435\u043c\u0443 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0441 \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439 15.\nPOC\n\ud83c\udf10 \u0421\u0441\u044b\u043b\u043a\u0430\n\u27bf\u27bf\u27bf\u27bf\u27bf\u27bf\u27bf\u27bf\u27bf\u27bf\u27bf\n\n\ud83d\udca1 Microsoft Exchange Server Remote Code Execution\n\n\u041e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:\nCVE-2023-36745\n\u0421\u043a\u043e\u0440\u0438\u043d\u0433 CVSS3.x:\n\u270d\ufe0f\u270d\ufe0f\u270d\ufe0f\n\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435:\n- \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0438 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0436\u0435\u0440\u0442\u0432\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u0440\u043e\u0441\u0442\u043e\u044e \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.\nPOC\n\ud83c\udf10 \u0421\u0441\u044b\u043b\u043a\u0430\n\ud83c\udf10 \u0421\u0441\u044b\u043b\u043a\u0430\n\n#poc", "creation_timestamp": "2023-11-10T10:57:44.000000Z"}, {"uuid": "618af9e3-77df-473c-b046-7ce2e6115d73", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/6723", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aRCE\n\u63cf\u8ff0\uff1aActiveMQ RCE (CVE-2023-46604) \u56de\u663e\u5229\u7528\u5de5\u5177\nURL\uff1ahttps://github.com/Arlenhiack/ActiveMQ-RCE-Exploit\n\n\u6807\u7b7e\uff1a#RCE", "creation_timestamp": "2024-03-05T08:31:17.000000Z"}, {"uuid": "b8dfaed2-b293-4cfb-8fb8-70a0d576d98f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/CyberBulletin/1718", "content": "\u26a1\ufe0fMauri Ransomware Exploits Apache ActiveMQ Flaw (CVE-2023-46604).\n\n#CyberBulletin", "creation_timestamp": "2024-12-09T13:14:22.000000Z"}, {"uuid": "66f7eb26-2f74-47eb-8a4b-ea15ce434d9b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/kasperskyb2b/978", "content": "\u2699\ufe0f \u0420\u0430\u043d\u0441\u043e\u043c\u0432\u0430\u0440\u0449\u0438\u043a\u0438 \u0432\u0437\u044f\u043b\u0438\u0441\u044c \u0437\u0430 Apache ActiveMQ\n\n\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u0440\u0430\u0437\u0433\u043b\u0430\u0448\u0451\u043d\u043d\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u0431\u0440\u043e\u043a\u0435\u0440\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 Apache ActiveMQ (CVE-2023-46604, CVSS 10), \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0449\u0430\u044f \u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0431\u044b\u043b\u0430 \u0432\u0437\u044f\u0442\u0430 \u043d\u0430 \u0432\u043e\u043e\u0440\u0443\u0436\u0435\u043d\u0438\u0435 ransomware-\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u043e\u0439 HelloKitty. \u041f\u043e\u0441\u043b\u0435 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 Java.exe, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0430\u044f ActiveMQ, \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0437\u0430\u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0434 PNG-\u0444\u0430\u0439\u043b\u044b. \n\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0443 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u0437\u0430 HelloKitty \u044f\u0432\u043d\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u2014 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u0443\u044e \u0441\u0435\u0442\u044c \u0437\u0430\u0447\u0435\u043c-\u0442\u043e \u0441\u043c\u043e\u0442\u0440\u044f\u0442 \u0442\u044b\u0441\u044f\u0447\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 ActiveMQ. \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 ActiveMQ \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0440\u043e\u0447\u043d\u043e, \u0430 \u0432 \u0431\u043e\u043b\u0435\u0435 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e\u0439 \u043e\u0431\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u2014 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0438 \u0432\u043e\u043f\u043b\u043e\u0442\u0438\u0442\u044c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 Apache \u043f\u043e \u0443\u0441\u0438\u043b\u0435\u043d\u0438\u044e \u0437\u0430\u0449\u0438\u0442\u044b ActiveMQ, \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432 \u0447\u0430\u0441\u0442\u0438 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438.\n\n#\u043d\u043e\u0432\u043e\u0441\u0442\u0438 @\u041f2\u0422", "creation_timestamp": "2023-11-03T11:51:24.000000Z"}, {"uuid": "9c7a3f43-85bb-407b-a92f-2886999e03fc", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/ctinow/146981", "content": "https://ift.tt/MKBP7mi\nSuspected exploitation of Apache ActiveMQ flaw CVE-2023-46604 to install HelloKitty ransomware", "creation_timestamp": "2023-11-02T15:19:46.000000Z"}, {"uuid": "1e407f1f-6b50-4844-8111-08aeb89190ba", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/Blackhat_Officials/831", "content": "https://www.trendmicro.com/en_us/research/23/k/cve-2023-46604-exploited-by-kinsing.html\n\nCVE-2023-46604(Apache ActiveMQ)\u88ab\u5229\u7528\u6765\u611f\u67d3\u5bc6\u7801\u5668\u548cRootkit\u7cfb\u7edf\n#\u65b0\u95fb", "creation_timestamp": "2023-11-23T11:23:59.000000Z"}, {"uuid": "e11baa6b-875d-4b0c-9a7a-659ae068a484", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/ctinow/150442", "content": "https://ift.tt/Gmbod9z\nCVE-2023-46604 (Apache ActiveMQ) Exploited to Infect Systems With Cryptominers and Rootkits", "creation_timestamp": "2023-11-20T10:18:22.000000Z"}, {"uuid": "88159f18-f7dd-442b-be6b-c7613eb10392", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/ctinow/150438", "content": "https://ift.tt/Gmbod9z\nCVE-2023-46604 (Apache ActiveMQ) Exploited to Infect Systems With Cryptominers and Rootkits", "creation_timestamp": "2023-11-20T09:42:16.000000Z"}, {"uuid": "168ed7b9-2c27-40d0-b4c5-73702d3eba3d", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/Teamx1945x/1030", "content": "\u200b\u200bActiveMQ RCE (CVE-2023-46604)\n\n Apache ActiveMQ \u0639\u0631\u0636\u0629 \u0644\u062a\u0646\u0641\u064a\u0630 \u0627\u0644\u062a\u0639\u0644\u064a\u0645\u0627\u062a \u0627\u0644\u0628\u0631\u0645\u062c\u064a\u0629 \u0639\u0646 \u0628\u0639\u062f. \u0642\u062f \u062a\u0633\u0645\u062d \u0627\u0644\u062b\u063a\u0631\u0629 \u0627\u0644\u0623\u0645\u0646\u064a\u0629 \u0644\u0645\u0647\u0627\u062c\u0645 \u0639\u0646 \u0628\u0639\u062f \u0644\u062f\u064a\u0647 \u0625\u0645\u0643\u0627\u0646\u064a\u0629 \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0627\u0644\u0634\u0628\u0643\u0629 \u0625\u0644\u0649 \u0648\u0633\u064a\u0637 \u0628\u062a\u0634\u063a\u064a\u0644 \u0623\u0648\u0627\u0645\u0631 shell \u0639\u0634\u0648\u0627\u0626\u064a\u0629 \u0645\u0646 \u062e\u0644\u0627\u0644 \u0645\u0639\u0627\u0644\u062c\u0629 \u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u0641\u0626\u0627\u062a \u0627\u0644\u0645\u062a\u0633\u0644\u0633\u0644\u0629 \u0641\u064a \u0628\u0631\u0648\u062a\u0648\u0643\u0648\u0644 OpenWire \u0644\u062c\u0639\u0644 \u0627\u0644\u0648\u0633\u064a\u0637 \u064a\u0642\u0648\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0645\u062b\u064a\u0644 \u0644\u0623\u064a \u0641\u0626\u0629 \u0639\u0644\u0649 \u0645\u0633\u0627\u0631 \u0627\u0644\u0641\u0635\u0644.\n\n https://github.com/X1r0z/ActiveMQ-RCE", "creation_timestamp": "2024-03-29T18:27:12.000000Z"}, {"uuid": "69ca2e59-e3fc-4bf4-8b1b-fba3817a7bc4", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "Telegram/eIAKKKujGGX1YtMrhCJdc0NGCUPUvr8Sx3WcOruhN7yC3w", "content": "", "creation_timestamp": "2023-12-14T14:59:58.000000Z"}, {"uuid": "be7db5f7-c8cf-4bca-8a56-248469332753", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "Telegram/CkqWcB2-9bV8ckxbIWhMB5p9N1JH4cVPNSmWsfsHUZk6uQ", "content": "", "creation_timestamp": "2023-11-06T18:48:47.000000Z"}, {"uuid": "f63890e3-23ee-49b5-8a8b-afde3a8ab73e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "Telegram/WkCj478u4G58ojIUL87WPLotrcOV3WzYpuImpssFRSo1Uw", "content": "", "creation_timestamp": "2023-11-02T20:48:31.000000Z"}, {"uuid": "51ac71a2-43fd-46ed-b740-0a9642eb05fe", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/tengkorakcybercrewz/3257", "content": "Hackers Feast on Unpatched ActiveMQ!  CVE-2023-46604, a critical remote code execution flaw, is back in the spotlight. \n \nLearn more: https://thehackernews.com/2024/01/apache-activemq-flaw-exploited-in-new.html \n \nUpdate your Apache ASAP or risk ransomware, rootkits, and botnets.", "creation_timestamp": "2024-01-22T16:59:24.000000Z"}, {"uuid": "f1c6bcfc-85dd-46a4-be96-a61d19e98c77", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/pt_soft/171", "content": "\ud83d\udca3 PoC in GitHub\n\n\ud83d\udcbb \u041e\u0433\u0440\u043e\u043c\u043d\u0430\u044f \u0430\u0432\u0442\u043e-\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c\u0430\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f PoC. \u041f\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0443 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u0438\u043a \u044d\u043a\u0441\u043f\u043b\u043e\u0438\u0442\u043e\u0432.\n\n\u041f\u043e\u0438\u0441\u043a \u043f\u043e \u043d\u043e\u043c\u0435\u0440\u0443 CVE:\ncurl 'https://poc-in-github.motikan2010.net/api/v1/?cve_id=CVE-2023-46604' | jq\n\n\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u0432\u0435\u0436\u0430\u044f RCE \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 Apache ActiveMQ. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 JSON \u0432\u044b\u0432\u043e\u0434 \u043d\u0430 \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u044d\u043a\u0441\u043f\u043b\u043e\u0438\u0442\u0430\n\n{\n      \"id\": \"725243332\",\n      \"cve_id\": \"CVE-2023-46604\",\n      \"name\": \"activemq-cve-2023-46604\",\n      \"owner\": \"tomasmussi-mulesoft\",\n      \"full_name\": \"tomasmussi-mulesoft/activemq-cve-2023-46604\",\n      \"html_url\": \"https://github.com/tomasmussi-mulesoft/activemq-cve-2023-46604\",\n      \"description\": \"Repository to exploit CVE-2023-46604 reported for ActiveMQ\",\n      \"stargazers_count\": \"0\",\n      \"vuln_description\": \"Apache ActiveMQ is vulnerable to Remote Code Execution.The vulnerability may allow a remote attacker with network access to a broker to run arbitrary shell commands by manipulating serialized class types in the OpenWire protocol to cause the broker to instantiate\u00a0any class on the classpath.\u00a0\\n\\nUsers are recommended to upgrade to version 5.15.16, 5.16.7, 5.17.6, or 5.18.3, which fixes this issue.\",\n      \"created_at\": \"2023-11-30 03:30:02\",\n      \"updated_at\": \"2023-11-30 03:30:02\",\n      \"pushed_at\": \"2023-11-30 03:30:02\",\n      \"inserted_at\": \"2023-11-30 09:37:18\"\n    }\n\n\u041a\u0430\u043a \u0432\u043e\u0434\u0438\u0442\u0441\u044f, \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u043b \u043a \u0431\u043e\u0442\u0443:\n\n!poc CVE-2023-46604\n\n\ud83d\udcbb GitHub\n\ud83d\udcbb Home\n\n#poc #github #exploit #cve\n\n\u2708\ufe0f // Pentest HaT \ud83c\udfa9", "creation_timestamp": "2023-12-04T12:23:11.000000Z"}, {"uuid": "246bc288-df13-487f-85f3-15e9de13a4ec", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/arpsyndicate/4637", "content": "#ExploitObserverAlert\n\nCVE-2023-46604\n\nDESCRIPTION: Exploit Observer has 154 entries in 17 file formats related to CVE-2023-46604. The Java OpenWire protocol marshaller is vulnerable to Remote Code  Execution. This vulnerability may allow a remote attacker with network  access to either a Java-based OpenWire broker or client to run arbitrary  shell commands by manipulating serialized class types in the OpenWire  protocol to cause either the client or the broker (respectively) to  instantiate any class on the classpath.  Users are recommended to upgrade  both brokers and clients to version 5.15.16, 5.16.7, 5.17.6, or 5.18.3  which fixes this issue.\n\nFIRST-EPSS: 0.972480000\nNVD-IS: 5.9\nNVD-ES: 3.9\nARPS-EXPLOITABILITY: 0.7831866", "creation_timestamp": "2024-04-13T02:42:19.000000Z"}, {"uuid": "c34cdaf9-7a83-448e-9bd5-345bdf08c24e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/arpsyndicate/1834", "content": "#ExploitObserverAlert\n\nCVE-2023-46604\n\nDESCRIPTION: Exploit Observer has 102 entries related to CVE-2023-46604. The Java OpenWire protocol marshaller is vulnerable to Remote Code  Execution. This vulnerability may allow a remote attacker with network  access to either a Java-based OpenWire broker or client to run arbitrary  shell commands by manipulating serialized class types in the OpenWire  protocol to cause either the client or the broker (respectively) to  instantiate any class on the classpath.  Users are recommended to upgrade  both brokers and clients to version 5.15.16, 5.16.7, 5.17.6, or 5.18.3  which fixes this issue.\n\nFIRST-EPSS: 0.968050000\nNVD-IS: 5.9\nNVD-ES: 3.9", "creation_timestamp": "2023-12-16T15:14:15.000000Z"}, {"uuid": "a9c29888-a606-4642-bd12-075be23c7ff9", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/arpsyndicate/1788", "content": "#ExploitObserverAlert\n\nCVE-2023-46604\n\nDESCRIPTION: Exploit Observer has 102 entries related to CVE-2023-46604. The Java OpenWire protocol marshaller is vulnerable to Remote Code  Execution. This vulnerability may allow a remote attacker with network  access to either a Java-based OpenWire broker or client to run arbitrary  shell commands by manipulating serialized class types in the OpenWire  protocol to cause either the client or the broker (respectively) to  instantiate any class on the classpath.  Users are recommended to upgrade  both brokers and clients to version 5.15.16, 5.16.7, 5.17.6, or 5.18.3  which fixes this issue.\n\nFIRST-EPSS: 0.968050000\nNVD-IS: 5.9\nNVD-ES: 3.9", "creation_timestamp": "2023-12-12T01:39:05.000000Z"}, {"uuid": "d928baf4-ab01-47e2-a9a1-c1d73e1c92eb", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/arpsyndicate/874", "content": "#ExploitObserverAlert\n\nCVE-2023-46604\n\nDESCRIPTION: Exploit Observer has 102 entries related to CVE-2023-46604. The Java OpenWire protocol marshaller is vulnerable to Remote Code  Execution. This vulnerability may allow a remote attacker with network  access to either a Java-based OpenWire broker or client to run arbitrary  shell commands by manipulating serialized class types in the OpenWire  protocol to cause either the client or the broker (respectively) to  instantiate any class on the classpath.  Users are recommended to upgrade  both brokers and clients to version 5.15.16, 5.16.7, 5.17.6, or 5.18.3  which fixes this issue.\n\nFIRST-EPSS: 0.968050000\nNVD-IS: 5.9\nNVD-ES: 3.9", "creation_timestamp": "2023-12-02T01:26:35.000000Z"}, {"uuid": "bfa5b3f8-ae77-411b-8a59-d8bee84bd093", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/arpsyndicate/922", "content": "#ExploitObserverAlert\n\nCVE-2023-46604\n\nDESCRIPTION: Exploit Observer has 96 entries related to CVE-2023-46604. The Java OpenWire protocol marshaller is vulnerable to Remote Code  Execution. This vulnerability may allow a remote attacker with network  access to either a Java-based OpenWire broker or client to run arbitrary  shell commands by manipulating serialized class types in the OpenWire  protocol to cause either the client or the broker (respectively) to  instantiate any class on the classpath.  Users are recommended to upgrade  both brokers and clients to version 5.15.16, 5.16.7, 5.17.6, or 5.18.3  which fixes this issue.\n\nFIRST-EPSS: 0.968050000\nNVD-IS: 5.9\nNVD-ES: 3.9", "creation_timestamp": "2023-12-03T11:35:49.000000Z"}, {"uuid": "152e53f5-7d12-440b-a065-9f0b2a51edef", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/arpsyndicate/790", "content": "#ExploitObserverAlert\n\nCVE-2023-46604\n\nDESCRIPTION: Exploit Observer has 99 entries related to CVE-2023-46604. The Java OpenWire protocol marshaller is vulnerable to Remote Code  Execution. This vulnerability may allow a remote attacker with network  access to either a Java-based OpenWire broker or client to run arbitrary  shell commands by manipulating serialized class types in the OpenWire  protocol to cause either the client or the broker (respectively) to  instantiate any class on the classpath.  Users are recommended to upgrade  both brokers and clients to version 5.15.16, 5.16.7, 5.17.6, or 5.18.3  which fixes this issue.\n\nFIRST-EPSS: 0.966470000\nNVD-IS: 5.9\nNVD-ES: 3.9", "creation_timestamp": "2023-11-30T07:18:49.000000Z"}, {"uuid": "ff34c93e-f59e-4db9-9ae1-b69654e3f975", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/arpsyndicate/839", "content": "#ExploitObserverAlert\n\nCVE-2023-46604\n\nDESCRIPTION: Exploit Observer has 101 entries related to CVE-2023-46604. The Java OpenWire protocol marshaller is vulnerable to Remote Code  Execution. This vulnerability may allow a remote attacker with network  access to either a Java-based OpenWire broker or client to run arbitrary  shell commands by manipulating serialized class types in the OpenWire  protocol to cause either the client or the broker (respectively) to  instantiate any class on the classpath.  Users are recommended to upgrade  both brokers and clients to version 5.15.16, 5.16.7, 5.17.6, or 5.18.3  which fixes this issue.\n\nFIRST-EPSS: 0.968050000\nNVD-IS: 5.9\nNVD-ES: 3.9", "creation_timestamp": "2023-12-01T07:46:40.000000Z"}, {"uuid": "fdda3710-1547-46a6-93c5-c0ef76f8bc7c", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/arpsyndicate/826", "content": "#ExploitObserverAlert\n\nCVE-2023-46604\n\nDESCRIPTION: Exploit Observer has 100 entries related to CVE-2023-46604. The Java OpenWire protocol marshaller is vulnerable to Remote Code  Execution. This vulnerability may allow a remote attacker with network  access to either a Java-based OpenWire broker or client to run arbitrary  shell commands by manipulating serialized class types in the OpenWire  protocol to cause either the client or the broker (respectively) to  instantiate any class on the classpath.  Users are recommended to upgrade  both brokers and clients to version 5.15.16, 5.16.7, 5.17.6, or 5.18.3  which fixes this issue.\n\nFIRST-EPSS: 0.966470000\nNVD-IS: 5.9\nNVD-ES: 3.9", "creation_timestamp": "2023-11-30T19:35:02.000000Z"}, {"uuid": "bfabca09-a9dc-4de8-932b-c87789a8613e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/arpsyndicate/645", "content": "#ExploitObserverAlert\n\nCVE-2023-46604\n\nDESCRIPTION: Exploit Observer has 97 entries related to CVE-2023-46604. The Java OpenWire protocol marshaller is vulnerable to Remote Code  Execution. This vulnerability may allow a remote attacker with network  access to either a Java-based OpenWire broker or client to run arbitrary  shell commands by manipulating serialized class types in the OpenWire  protocol to cause either the client or the broker (respectively) to  instantiate any class on the classpath.  Users are recommended to upgrade  both brokers and clients to version 5.15.16, 5.16.7, 5.17.6, or 5.18.3  which fixes this issue.\n\nFIRST-EPSS: 0.966470000\nNVD-IS: 5.9\nNVD-ES: 3.9", "creation_timestamp": "2023-11-28T13:32:56.000000Z"}, {"uuid": "45072c1c-fea1-4011-bc02-97c1a94b019c", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/arpsyndicate/561", "content": "#ExploitObserverAlert\n\nCVE-2023-46604\n\nDESCRIPTION: Exploit Observer has 30 entries related to CVE-2023-46604. The Java OpenWire protocol marshaller is vulnerable to Remote Code  Execution. This vulnerability may allow a remote attacker with network  access to either a Java-based OpenWire broker or client to run arbitrary  shell commands by manipulating serialized class types in the OpenWire  protocol to cause either the client or the broker (respectively) to  instantiate any class on the classpath.  Users are recommended to upgrade  both brokers and clients to version 5.15.16, 5.16.7, 5.17.6, or 5.18.3  which fixes this issue.\n\nFIRST-EPSS: 0.966470000\nNVD-IS: 5.9\nNVD-ES: 3.9", "creation_timestamp": "2023-11-25T02:03:40.000000Z"}, {"uuid": "af8fffb6-ea8c-49b9-9b94-82a16ca227a3", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/arpsyndicate/284", "content": "#ExploitObserverAlert\n\nCVE-2023-46604\n\nDESCRIPTION: Exploit Observer has 22 entries related to CVE-2023-46604. The Java OpenWire protocol marshaller is vulnerable to Remote Code \nExecution. This vulnerability may allow a remote attacker with network \naccess to either a Java-based OpenWire broker or client to run arbitrary\n shell commands by manipulating serialized class types in the OpenWire \nprotocol to cause either the client or the broker (respectively) to \ninstantiate any class on the classpath.\n\nUsers are recommended to upgrade\n both brokers and clients to version 5.15.16, 5.16.7, 5.17.6, or 5.18.3 \nwhich fixes this issue.\n\nFIRST-EPSS: 0.965740000\nNVD-IS: 5.9\nNVD-ES: 3.9", "creation_timestamp": "2023-11-19T16:28:56.000000Z"}, {"uuid": "4c5343da-3f58-433e-a48a-82559ba138dc", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "Telegram/KWy9x43_m_4oS4p8sjBIZiJ2agceiLXJ74W7PzvhYs8QAQ", "content": "", "creation_timestamp": "2023-11-29T06:37:12.000000Z"}, {"uuid": "2b5229ab-61fa-44fd-ba99-6e52cea1a6dd", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/arpsyndicate/296", "content": "#ExploitObserverAlert\n\nCVE-2023-46604\n\nDESCRIPTION: Exploit Observer has 23 entries related to CVE-2023-46604. The Java OpenWire protocol marshaller is vulnerable to Remote Code  Execution. This vulnerability may allow a remote attacker with network  access to either a Java-based OpenWire broker or client to run arbitrary  shell commands by manipulating serialized class types in the OpenWire  protocol to cause either the client or the broker (respectively) to  instantiate any class on the classpath.  Users are recommended to upgrade  both brokers and clients to version 5.15.16, 5.16.7, 5.17.6, or 5.18.3  which fixes this issue.\n\nFIRST-EPSS: 0.965740000\nNVD-IS: 5.9\nNVD-ES: 3.9", "creation_timestamp": "2023-11-20T15:55:09.000000Z"}, {"uuid": "2706cd6a-cedf-4a73-a149-285b01039a7e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/arpsyndicate/1660", "content": "#ExploitObserverAlert\n\nCVE-2023-46604\n\nDESCRIPTION: Exploit Observer has 102 entries related to CVE-2023-46604. The Java OpenWire protocol marshaller is vulnerable to Remote Code  Execution. This vulnerability may allow a remote attacker with network  access to either a Java-based OpenWire broker or client to run arbitrary  shell commands by manipulating serialized class types in the OpenWire  protocol to cause either the client or the broker (respectively) to  instantiate any class on the classpath.  Users are recommended to upgrade  both brokers and clients to version 5.15.16, 5.16.7, 5.17.6, or 5.18.3  which fixes this issue.\n\nFIRST-EPSS: 0.968050000\nNVD-IS: 5.9\nNVD-ES: 3.9", "creation_timestamp": "2023-12-10T16:58:02.000000Z"}, {"uuid": "8696900f-f214-470e-b5f2-c7bc337587ca", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/arpsyndicate/729", "content": "#ExploitObserverAlert\n\nCVE-2023-46604\n\nDESCRIPTION: Exploit Observer has 98 entries related to CVE-2023-46604. The Java OpenWire protocol marshaller is vulnerable to Remote Code  Execution. This vulnerability may allow a remote attacker with network  access to either a Java-based OpenWire broker or client to run arbitrary  shell commands by manipulating serialized class types in the OpenWire  protocol to cause either the client or the broker (respectively) to  instantiate any class on the classpath.  Users are recommended to upgrade  both brokers and clients to version 5.15.16, 5.16.7, 5.17.6, or 5.18.3  which fixes this issue.\n\nFIRST-EPSS: 0.966470000\nNVD-IS: 5.9\nNVD-ES: 3.9", "creation_timestamp": "2023-11-29T11:59:53.000000Z"}, {"uuid": "802cad46-2cb5-468b-abc6-c7c5c25f6141", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "Telegram/9_hSQ5H_XCdMIWoxBCsN5onf45I8pzWT1rnfQOk1J6gzkg", "content": "", "creation_timestamp": "2023-11-15T18:25:32.000000Z"}, {"uuid": "ec3d9964-96dc-4c52-be95-ebdc09818457", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/tengkorakcybercrewz/314", "content": "Hackers Feast on Unpatched ActiveMQ!  CVE-2023-46604, a critical remote code execution flaw, is back in the spotlight. \n \nLearn more: https://thehackernews.com/2024/01/apache-activemq-flaw-exploited-in-new.html \n \nUpdate your Apache ASAP or risk ransomware, rootkits, and botnets.", "creation_timestamp": "2024-01-22T16:59:24.000000Z"}, {"uuid": "45306d84-42f0-4469-b20f-548f2b3880fc", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/KomunitiSiber/1077", "content": "New PoC Exploit for Apache ActiveMQ Flaw Could Let Attackers Fly Under the Radar\nhttps://thehackernews.com/2023/11/new-poc-exploit-for-apache-activemq.html\n\nCybersecurity researchers have demonstrated a new technique that exploits a critical security flaw in Apache ActiveMQ to achieve arbitrary code execution in memory.\nTracked as\u00a0CVE-2023-46604\u00a0(CVSS score: 10.0), the vulnerability is a remote code execution bug that could permit a threat actor to run arbitrary shell commands.\nIt was patched by Apache in ActiveMQ versions 5.15.16, 5.16.7, 5.17.6,", "creation_timestamp": "2023-11-15T15:58:54.000000Z"}, {"uuid": "229facb1-36f5-4634-921c-65b3134e7013", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/KomunitiSiber/1136", "content": "GoTitan Botnet Spotted Exploiting Recent Apache ActiveMQ Vulnerability\nhttps://thehackernews.com/2023/11/gotitan-botnet-spotted-exploiting.html\n\nThe recently disclosed critical security flaw impacting Apache ActiveMQ is being actively exploited by threat actors to distribute a new Go-based botnet called\u00a0GoTitan\u00a0as well as a .NET program known as\u00a0PrCtrl Rat\u00a0that's capable of remotely commandeering the infected hosts.\nThe attacks involve the exploitation of a remote code execution bug (CVE-2023-46604, CVSS score: 10.0) that has been\u00a0", "creation_timestamp": "2023-11-29T06:24:16.000000Z"}, {"uuid": "812fd797-6317-4515-b3f2-8653216deb31", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "Telegram/uT9sUuLzJ7mljLMv83o-xR7L3rBffmKTpZTwj9jnFA3DQA", "content": "", "creation_timestamp": "2023-11-05T03:43:59.000000Z"}, {"uuid": "04798a89-cc81-46b2-9b1c-62eca34f4adf", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/proxy_bar/1818", "content": "CVE-2023-46604 ActiveMQ RCE\nexploit + xml\n\n#activemq", "creation_timestamp": "2023-11-08T10:50:29.000000Z"}, {"uuid": "1fe36503-66f4-4c06-a5f8-ddc3b5dcbf11", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "Telegram/lG6pt5UtBUCzn-IF2Ytstw8S3_g1FpOFh4eJ9RqNUd8P9lg", "content": "", "creation_timestamp": "2023-11-29T19:53:49.000000Z"}, {"uuid": "ef3e280e-82d5-41fd-a819-349da1914410", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "Telegram/7koUXiQYjANVreQRymdkTng-drcHtTeg6KyrU5xTB_ps-oE", "content": "", "creation_timestamp": "2023-11-22T22:32:00.000000Z"}, {"uuid": "f3af79c6-8e3f-49c0-9bcc-435864361c0f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/breachdetector/491278", "content": "{\n  \"Source\": \"https://www.turkhackteam.org/\",\n  \"Content\": \"What is CVE-2023-46604 Apache ActiveMQ ?\", \n  \"author\": \" ('BARBAROS)\",\n  \"Detection Date\": \"09 Apr 2024\",\n  \"Type\": \"Data leak\"\n}\n\ud83d\udd39 t.me/breachdetector \ud83d\udd39", "creation_timestamp": "2024-04-09T11:09:38.000000Z"}, {"uuid": "2f9b78bb-ae7f-4803-8fed-9910fcb5cd8c", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/breachdetector/491262", "content": "{\n  \"Source\": \"https://www.turkhackteam.org/\",\n  \"Content\": \"CVE-2023-46604 Apache ActiveMQ Nedir ?\", \n  \"author\": \" ('BARBAROS)\",\n  \"Detection Date\": \"09 Apr 2024\",\n  \"Type\": \"Data leak\"\n}\n\ud83d\udd39 t.me/breachdetector \ud83d\udd39", "creation_timestamp": "2024-04-09T10:44:14.000000Z"}, {"uuid": "c7c133fd-11dc-4393-b6c8-1987fc389d3d", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "Telegram/AactUrH-EIy6JdXWM4VPE9pcjyt1yqOYuT7uQixSUbYBJC0", "content": "", "creation_timestamp": "2023-11-08T03:49:03.000000Z"}, {"uuid": "e02cb43c-aff8-475e-8da2-1bcf8d588c43", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/cybersecs/2770", "content": "Invicti Professional v24.3.0 - 12 Mar 2024\n\nDownload: https://ponies.cloud/scanner_web/invicti/Invicti-Professional-v24.3.0-Pwn3rzs-CyberArsenal.rar\nPassword: Pwn3rzs\n\nChangelog:\n\nNEW FEATURES\n\nAdded the ability to force authentication verifier agents to use incognito mode by default on Chromium browsers\n\nNEW SECURITY CHECKS\n\nAdded detection for ActiveMQ RCE to the OOB RCE Attack Pattern (CVE-2023-46604)\n\nFIXES\n\nAdded a Cookie Source field to the Knowledge Base Cookies screen", "creation_timestamp": "2024-03-17T20:51:21.000000Z"}, {"uuid": "2d1f5020-76e4-402b-9d03-d42411b205a7", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/true_secator/5145", "content": "\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 AhnLab \u0441\u043e\u043e\u0431\u0449\u0430\u044e\u0442, \u0447\u0442\u043e\u00a0\u0441\u0435\u0432\u0435\u0440\u043e\u043a\u043e\u0440\u0435\u0439\u0441\u043a\u0430\u044f \u0410\u0420\u0422 Andariel \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043b\u0430\u0441\u044c \u043a \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 Apache ActiveMQ \u0447\u0435\u0440\u0435\u0437 CVE-2023-46604 \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0431\u044d\u043a\u0434\u043e\u0440\u043e\u0432 NukeSped \u0438 TigerRat.\n\n\u042f\u0432\u043b\u044f\u044f\u0441\u044c \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u043e\u0439 Lazarus, \u0445\u0430\u043a\u0435\u0440\u044b \u043d\u0430\u0446\u0435\u043b\u0435\u043d\u044b \u043d\u0430 \u042e\u0436\u043d\u0443\u044e \u041a\u043e\u0440\u0435\u044e \u0441 2008 \u0433\u043e\u0434\u0430, \u0430 \u0432 \u0447\u0438\u0441\u043b\u0435 \u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0446\u0435\u043b\u0435\u0439 - \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043e\u0431\u043e\u0440\u043e\u043d\u044b, \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438, \u0441\u0443\u0434\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f, \u044d\u043d\u0435\u0440\u0433\u0435\u0442\u0438\u043a\u0438, \u043b\u043e\u0433\u0438\u0441\u0442\u0438\u043a\u0438 \u0438 \u0442\u0435\u043b\u0435\u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0443\u0447\u043d\u044b\u0435 \u0443\u0447\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0438 IT-\u0441\u0435\u043a\u0442\u043e\u0440.\n\nAndariel \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0444\u0438\u0448\u0438\u043d\u0433, \u0430\u0442\u0430\u043a\u0438 \u043d\u0430 \u0432\u043e\u0434\u043e\u043f\u043e\u0438 \u0438 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u043e\u043a, \u0430 \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u0430\u043c\u043f\u0430\u043d\u0438\u044f\u0445 \u0433\u0440\u0443\u043f\u043f\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 Log4Shell \u0438 TeamCity, \u043d\u0430\u0446\u0435\u043b\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u044b MS-SQL \u0438\u043b\u0438 \u0437\u043b\u043e\u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u043b\u0430 \u0437\u0430\u043a\u043e\u043d\u043d\u044b\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u043c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435\u043c.\n\n\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u044f \u0430\u0442\u0430\u043a\u0438 \u0433\u0440\u0443\u043f\u043f\u044b Andariel, AhnLab \u0437\u0430\u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u043b\u0435\u0434\u043e\u0432 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 NukeSped \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c. \u0414\u043e \u043a\u043e\u043d\u0446\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e CVE-2023-46604 \u0431\u044b\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430, \u0442\u0430\u043a \u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c, \u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e \u0431\u044b\u043b\u0430 \u0430\u0442\u0430\u043a\u043e\u0432\u0430\u043d\u0430 HelloKitty.\n\n\u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0440\u0430\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e, \u0447\u0442\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0430\u0442\u0430\u043a\u0438 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043a\u043b\u0430\u0441\u0441\u0430 Java, \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c\u044b\u0439 \u0432 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u043c \u043e\u0442\u0447\u0435\u0442\u0435 Huntress, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u043b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0432 \u0441\u0440\u0435\u0434\u0430\u0445 Windows \u0438\u043b\u0438 Linux. \u0422\u0430\u043a\u0436\u0435 \u0431\u044b\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b \u0436\u0443\u0440\u043d\u0430\u043b\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 Stager CobaltStrike \u0438 Metasploit Meterpreter.\n\n\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 \u043e\u0442\u0447\u0435\u0442\u0435 Huntress \u043d\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u043a\u0430\u043a\u043e\u0435-\u043b\u0438\u0431\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0435 \u041f\u041e, \u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u0430\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0431\u044b\u043b\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0441 hxxp://27.102.128[.]152:8098/bit[.]ico, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b URL-\u0430\u0434\u0440\u0435\u0441\u0443, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0442\u0430\u043a\u0436\u0435 \u0431\u044b\u043b \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d TigerRat.\n\n\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 NukeSped \u2014 \u044d\u0442\u043e \u0431\u044d\u043a\u0434\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u0440\u0430\u0436\u0435\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043e\u0442 \u04212, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0435\u0432\u0435\u0440\u043e\u043a\u043e\u0440\u0435\u0439\u0441\u043a\u0438\u043c\u0438 \u0445\u0430\u043a\u0435\u0440\u0430\u043c\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f Andariel, \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0437\u0430\u0440\u0430\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c.\n\n\u041e\u0434\u043d\u0430\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 \u0430\u0442\u0430\u043a\u0430\u0445 \u043e\u0431\u0440\u0430\u0437\u0435\u0446 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b: \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0444\u0430\u0439\u043b\u043e\u0432, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445  \u0432\u0435\u0440\u0441\u0438\u0439, \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u0430\u043d\u0434.\n\n\u041a\u0430\u043a \u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0445 \u0442\u0438\u043f\u0430\u0445 NukeSped, \u0432\u0441\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 API \u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u0448\u0438\u0444\u0440\u0443\u044e\u0442\u0441\u044f, \u0437\u0430\u0442\u0435\u043c \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.\u00a0\u041c\u0435\u0442\u043e\u0434 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 1-\u0431\u0430\u0439\u0442\u043e\u0432\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c XOR \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043a\u043b\u044e\u0447\u0430 0xA1.\u00a0\u041f\u043e\u043c\u0438\u043c\u043e 0xA1, \u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0430\u0442\u0430\u043a \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0435\u0439 0x97 \u0438 0xAB.\n\n\u0412\u0441\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438, \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u0432 \u0445\u043e\u0434\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0410\u0420\u0422 - \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u043e\u0442\u0447\u0435\u0442\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u0447\u0442\u043e \u0445\u043e\u0442\u044f \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e CVE-2023-46604 \u043f\u0440\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043d\u0435\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 \u0441\u0442\u043e\u043b\u044c \u043a\u043e\u0440\u043e\u0442\u043a\u0439\u0438 \u0441\u0440\u043e\u043a \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0430\u0442\u0430\u043a, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438\u043d\u0441\u043f\u0438\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0410\u0420\u0422.", "creation_timestamp": "2023-11-30T09:31:26.000000Z"}, {"uuid": "150a322d-5fe9-463a-93bc-324f861748e1", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/true_secator/5118", "content": "\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 Trend Micro \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438, \u0447\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 Apache ActiveMQ \u043f\u043e\u043c\u0438\u043c\u043e \u0431\u0430\u043d\u0434 \u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u0435\u0439 HelloKitty\u00a0\u0438\u00a0TellYouThePass \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0431\u043e\u0442\u043d\u0435\u0442\u0430 Kinsing.\n\n\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u041f\u041e \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 CVE-2023-46604 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445 ActiveMQ \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c Linux \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u0439\u043d\u0435\u0440\u043e\u0432 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442\u044b.\n\n\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b\u00a0Kinsing\u00a0\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b \u0442\u0435\u043c, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0430\u0441\u0442\u043e \u0443\u043f\u0443\u0441\u043a\u0430\u044e\u0442 \u0438\u0437 \u0432\u0438\u0434\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u044b, \u043a\u0430\u043a \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 Log4Shell\u00a0\u0438\u043b\u0438\u00a0Atlassian Confluence RCE.\n\n\u041a\u0430\u043a \u043e\u0442\u043c\u0435\u0447\u0430\u044e\u0442 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438, \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u044d\u043a\u0441\u043f\u043b\u043e\u0439\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u043c\u0435\u0442\u043e\u0434 ProcessBuilder \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f bash-\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0437\u0430\u0440\u0430\u0436\u0435\u043d\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438\u0437 \u0432\u043d\u043e\u0432\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f.\n\n\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u043c\u0443 \u041f\u041e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0441 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u044c\u044e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0438 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438, \u0438\u0437\u0431\u0435\u0433\u0430\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f.\n\n\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043c\u0430\u0439\u043d\u0438\u043d\u0433\u0430 \u043a\u0440\u0438\u043f\u0442\u044b, Kinsing \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043c\u0430\u0448\u0438\u043d\u0443 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043c\u0430\u0439\u043d\u0435\u0440\u043e\u0432 Monero, \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u044f \u0432\u0441\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, crontab \u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.\n\n\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e  \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u0441\u0442\u0432\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e cronjob, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f \u0437\u0430\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0443\u0442\u043a\u0438\u0442 \u0432 /etc/ld.so.preload.\n\n\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0443\u0442\u043a\u0438\u0442\u0430 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u0435\u0433\u043e \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043a\u0440\u044b\u0442\u044b\u043c \u0438 \u0442\u0440\u0443\u0434\u043d\u043e\u0443\u0434\u0430\u043b\u044f\u0435\u043c\u044b\u043c.\n\n\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0447\u0438\u0441\u043b\u043e \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 CVE-2023-46604, \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u0435\u043a\u0442\u043e\u0440\u0430\u0445 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434 \u0443\u0433\u0440\u043e\u0437\u043e\u0439 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0445 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u0432 \u0430\u0442\u0430\u043a\u0435 \u043d\u0430 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u043c\u0443\u0434\u0430\u043a\u043e\u0432 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u043b\u0438  \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u0432 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438.", "creation_timestamp": "2023-11-22T17:59:33.000000Z"}, {"uuid": "85fdfca0-6c85-49bc-be60-9e5fd83a0b2b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/true_secator/5091", "content": "\u041f\u043e\u044f\u0432\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u043d\u043e\u0432\u044b\u0439 PoC-\u044d\u043a\u0441\u043f\u043b\u043e\u0439\u0442 \u0434\u043b\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 Apache ActiveMQ \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430\u043c \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0437\u0430\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u043c\u0438.\n\n\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 VulnCheck \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043d\u043e\u0432\u0443\u044e \u0442\u0435\u0445\u043d\u0438\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e CVE-2023-46604\u00a0(\u0441 \u043e\u0446\u0435\u043d\u043a\u043e\u0439 CVSS: 10,0) \u0432 Apache ActiveMQ \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438.\n\n\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0431\u044b\u043b\u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 Apache \u0432 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 5.15.16, 5.16.7, 5.17.6 \u0438\u043b\u0438 5.18.3, \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0445 \u0435\u0449\u0435 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u043c\u0435\u0441\u044f\u0446\u0430, \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u00a0\u0430\u043a\u0442\u0438\u0432\u043d\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u0442\u0430\u043a\u0438\u0445 ransomware \u043a\u0430\u043a HelloKitty \u0438 TellYouThePass, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f SparkRAT.\n\n\u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e\u00a0\u043d\u043e\u0432\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c\u00a0VulnCheck, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f\u00a0\u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 PoC-\u044d\u043a\u0441\u043f\u043b\u043e\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u043a\u0440\u044b\u0442 25 \u043e\u043a\u0442\u044f\u0431\u0440\u044f 2023 \u0433\u043e\u0434\u0430.\n\n\u0412 \u0445\u043e\u0434\u0435 \u0430\u0442\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f ClassPathXmlApplicationContext, \u0441\u0440\u0435\u0434\u044b Spring \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u0432 ActiveMQ, \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 XML-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u00a0\u0447\u0435\u0440\u0435\u0437 HTTP \u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f RCE \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u0434\u043b\u0438\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.\n\n\u0412 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, VulnCheck \u0441\u043c\u043e\u0433\u043b\u0438 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043a\u0440\u044b\u0442\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0438 \u0434\u0430\u0436\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u044d\u043a\u0441\u043f\u043b\u043e\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u00a0FileSystemXmlApplicationContext\u00a0\u0438 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 SpEL\u00a0\u0432\u043c\u0435\u0441\u0442\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 init-method, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0441\u0431\u0440\u043e\u0441\u0430 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 \u0434\u0438\u0441\u043a.\n\n\u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u0444\u0430\u0439\u043b\u0435 activemq.log \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0442 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u0432 \u0442\u0430\u043a\u0436\u0435 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0430.\n\n\u0422\u0430\u043a \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u0430\u0442\u0430\u043a\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c CVE-2023-46604, \u0432 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0447\u0435\u043c \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 ActiveMQ \u0438\u043c\u0435\u0435\u0442 \u043e\u0441\u043e\u0431\u044b\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442.", "creation_timestamp": "2023-11-16T11:53:57.000000Z"}, {"uuid": "4ea3849f-069a-438b-8b61-3699d856d73f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/true_secator/5054", "content": "\u041f\u043e\u043c\u0438\u043c\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0431\u0430\u0433\u0438 Atlassian Confluence \u0432 \u0430\u043a\u0442\u0438\u0432\u0435 \u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c Apache ActiveMQ RCE, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430 \u0434\u0432\u0435 \u043d\u0435\u0434\u0435\u043b\u0438 \u0434\u043e \u0432\u044b\u0445\u043e\u0434\u0430 \u043f\u0430\u0442\u0447\u0430 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0432 \u0430\u0442\u0430\u043a\u0430\u0445 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 0-day.\n\n\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 ArcticWolf \u0438 Huntress Labs \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438 \u043d\u0430\u0446\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 CVE-2023-46604 \u0430\u0442\u0430\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u041f\u041e SparkRAT \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445 ActiveMQ \u0435\u0449\u0435 10 \u043e\u043a\u0442\u044f\u0431\u0440\u044f, \u0437\u0430\u0434\u043e\u043b\u0433\u043e \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a Apache \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c 25 \u043e\u043a\u0442\u044f\u0431\u0440\u044f. \n\n\u0410 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u0432 \u0441\u0435\u0442\u0438 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u00a0\u0431\u043e\u043b\u0435\u0435 9200\u00a0\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 Apache ActiveMQ, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445\u00a0\u0431\u043e\u043b\u0435\u0435 4770\u00a0\u0443\u044f\u0437\u0432\u0438\u043c\u044b \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043b\u043e\u0439\u0442\u043e\u0432 CVE-2023-46604 \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0445\u043e\u0434\u0430 \u043f\u0430\u0442\u0447\u0430, \u043a \u0430\u0442\u0430\u043a\u0430\u043c \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043b\u0438\u0441\u044c \u0438 \u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u0438.\n\n\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u043a\u0430\u043a \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 Huntress Labs \u0438 Rapid7, \u0431\u044b\u043b\u0438 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e HelloKitty, \u0430 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u043a \u043d\u0438\u043c \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438\u0441\u044c TellYouThePass.\n\n\u0427\u0442\u043e \u043d\u0435 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0432\u0435\u0434\u044c Apache ActiveMQ \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0430\u0445. \n\n\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043e\u0431\u043d\u043e\u0432\u0438\u0432 ActiveMQ \u0434\u043e \u0432\u0435\u0440\u0441\u0438\u0439 5.15.16, 5.16.7, 5.17.6 \u0438 5.18.3.", "creation_timestamp": "2023-11-07T14:50:21.000000Z"}, {"uuid": "d17c4593-4cfc-4507-a60a-09c6243ca82a", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/true_secator/5041", "content": "\u0411\u043e\u043b\u0435\u0435 3000 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 Apache ActiveMQ \u0443\u044f\u0437\u0432\u0438\u043c\u044b \u043a \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 RCE-\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438.\n\nApache ActiveMQ \u2014 \u044d\u0442\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 Java \u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0436\u044a\u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f AMQP, MQTT, OpenWire \u0438 STOMP.\n\n\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u043e\u043d \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0430\u0445, \u0433\u0434\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0431\u0435\u0437 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.\n\n\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u0430\u044f CVE-2023-46604 \u0438\u043c\u0435\u0435\u0442 \u043e\u0446\u0435\u043d\u043a\u0443 CVSS v3: 10,0 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430\u043c \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\u0431\u043e\u043b\u043e\u0447\u043a\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 OpenWire.\n\n\u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044e Apache\u00a0\u043e\u0442 27 \u043e\u043a\u0442\u044f\u0431\u0440\u044f, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 Apache Active MQ \u0438 Legacy OpenWire Module \u0432\u0435\u0440\u0441\u0438\u0438 5.18.x \u0434\u043e 5.18.3, 5.17.x \u0434\u043e 5.17.6, 5.16.x \u0434\u043e 5.16.7 \u0438 \u0432\u0441\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e 5.15.16.\n\n\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u0438 \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u044b \u0432 \u0442\u043e\u0442 \u0436\u0435 \u0434\u0435\u043d\u044c \u0441 \u0432\u044b\u043f\u0443\u0441\u043a\u043e\u043c \u0432\u0435\u0440\u0441\u0438\u0439 5.15.16, 5.16.7, 5.17.6 \u0438 5.18.3.\n\n\u041d\u043e \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u044d\u0442\u043e, \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0438\u0437 ShadowServer\u00a0\u0437\u0430\u0434\u0435\u0442\u0435\u043a\u0442\u0438\u043b\u0438 7249 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0441 ActiveMQ, \u0438\u0437 \u043d\u0438\u0445 3329 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0432\u0435\u0440\u0441\u0438\u044e ActiveMQ, \u0443\u044f\u0437\u0432\u0438\u043c\u0443\u044e \u0434\u043b\u044f CVE-2023-4660, \u043f\u0440\u0438\u0447\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u044b \u0443\u044f\u0437\u0432\u0438\u043c\u044b \u0434\u043b\u044f RCE.\n\n\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0445 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 (1400) \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0432 \u041a\u0438\u0442\u0430\u0435, \u0437\u0430\u0442\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0421\u0428\u0410 \u0441 530, \u0413\u0435\u0440\u043c\u0430\u043d\u0438\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u0440\u0435\u0442\u044c\u0435 \u0441 153, \u0430 \u0418\u043d\u0434\u0438\u044f, \u041d\u0438\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u044b, \u0420\u043e\u0441\u0441\u0438\u044f, \u0424\u0440\u0430\u043d\u0446\u0438\u044f \u0438 \u042e\u0436\u043d\u0430\u044f \u041a\u043e\u0440\u0435\u044f \u0438\u043c\u0435\u044e\u0442 \u043f\u043e 100 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u043a\u0430\u0436\u0434\u0430\u044f.\n\n\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0440\u043e\u043b\u044c Apache ActiveMQ \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0430\u0445, \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f CVE-2023-46604 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f\u043c, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0438 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 \u0441\u0435\u0442\u0438.\n\n\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f CVE-2023-46604 \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b, \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0431\u0435\u0437\u043e\u0442\u043b\u0430\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0438 \u043a\u0440\u0430\u043d\u0435 \u0441\u0440\u043e\u0447\u043d\u0443\u044e \u043c\u0435\u0440\u0443.", "creation_timestamp": "2023-11-02T14:24:42.000000Z"}, {"uuid": "dc2212c4-9c03-40bf-a78a-593becf7b1ea", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/crackcodes/4585", "content": "https://system32.ink/apache-activemq-rce-cve-2023-46604-exploit/", "creation_timestamp": "2023-11-05T03:42:35.000000Z"}, {"uuid": "d3d0efef-69c8-46e6-b4fb-91598c910dc3", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/ctinow/214463", "content": "https://ift.tt/Wu5jSmd\nThe Threat That Can\u2019t Be Ignored: CVE-2023-46604 in Apache ActiveMQ", "creation_timestamp": "2024-04-09T13:56:57.000000Z"}, {"uuid": "c27a9813-29a1-41b3-84cd-8234a36cc20f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/cibsecurity/73057", "content": "\u203c CVE-2023-46604 \u203c\n\nApache ActiveMQ is vulnerable to Remote Code Execution.The vulnerability may allow a remote attacker with network access to a broker to run arbitrary shell commands by manipulating serialized class types in the OpenWire protocol to cause the broker to instantiate\u00c2\u00a0any class on the classpath.\u00c2\u00a0Users are recommended to upgrade to version 5.15.16, 5.16.7, 5.17.6, or 5.18.3, which fixes this issue.\n\n\ud83d\udcd6 Read\n\nvia \"National Vulnerability Database\".", "creation_timestamp": "2023-10-27T18:17:07.000000Z"}, {"uuid": "b657f4ba-5927-4497-86a3-9f908a03ce4d", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/ctinow/180720", "content": "https://ift.tt/yqInvtf\nCVE-2023-46604 | Oracle Communications Element Manager up to 9.0.2.0.1 Security deserialization", "creation_timestamp": "2024-02-07T14:46:53.000000Z"}, {"uuid": "1f44a1dc-5609-489a-a95f-f5d4530d1876", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/ctinow/180722", "content": "https://ift.tt/B6V9hWQ\nCVE-2023-46604 | Oracle Communications Session Report Manager up to 9.0.2.0.1 Security deserialization", "creation_timestamp": "2024-02-07T14:46:55.000000Z"}, {"uuid": "c3987506-6929-4411-9af4-9d53b17b58af", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/ctinow/181257", "content": "https://ift.tt/rkIvRzL\nCVE-2023-46604 | Oracle Banking Digital Experience 22.1.0/22.2.0 UI General deserialization", "creation_timestamp": "2024-02-08T10:11:44.000000Z"}, {"uuid": "ebd621f0-df15-4d9c-9b06-5ef869bd391f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/ctinow/181755", "content": "https://ift.tt/AtR0dJ9\nCVE-2023-46604 | Oracle Enterprise Data Quality 12.2.1.4.0 General deserialization", "creation_timestamp": "2024-02-09T01:46:29.000000Z"}, {"uuid": "4549408c-b790-4249-bc86-86921d3cd96f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/ctinow/181254", "content": "https://ift.tt/smBXJHQ\nCVE-2023-46604 | Oracle Banking APIs 22.1.0/22.2.0 IDM - Authentication deserialization", "creation_timestamp": "2024-02-08T10:11:38.000000Z"}, {"uuid": "4abdd6ec-0842-4dfe-be81-4cf9914d59a8", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/ctinow/181280", "content": "https://ift.tt/8my7WFI\nCVE-2023-46604 | Oracle Financial Services Analytical Applications Infrastructure deserialization", "creation_timestamp": "2024-02-08T11:07:10.000000Z"}, {"uuid": "f8e8609d-8931-4309-9565-89f2403a46f9", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/cisoclub/4458", "content": "\u0425\u0430\u043a\u0435\u0440 \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u043b \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0432\u0437\u043b\u043e\u043c\u0430, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0445 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u0432\n\n\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 Red Canary \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u0438 \u043e \u043d\u043e\u0432\u043e\u0439 \u0442\u0430\u043a\u0442\u0438\u043a\u0435, \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u0438 \u0430\u0442\u0430\u043a\u0430\u0445 \u043d\u0430 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435 Linux-\u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0417\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a, \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0447\u0435\u0440\u0435\u0437 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 Apache ActiveMQ (CVE-2023-46604), \u043f\u043e\u0441\u043b\u0435 \u0435\u0451 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0441\u0430\u043c \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u043b \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u2014 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0445\u0430\u043a\u0435\u0440\u043e\u0432 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439.\n\n\u0420\u0435\u0447\u044c \u0438\u0434\u0451\u0442 \u043e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0435 \u0432 Apache ActiveMQ \u2014 \u0431\u0440\u043e\u043a\u0435\u0440\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c. \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u0430\u044f \u0432 2023 \u0433\u043e\u0434\u0443, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0438\u0437-\u0437\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0438\u043f\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 OpenWire-\u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445. \u0425\u043e\u0442\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u0438 \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u044b \u043f\u043e\u0447\u0442\u0438 \u0434\u0432\u0430 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434, CVE-2023-46604 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0430\u0442\u0430\u043a\u0430\u0445, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u0446\u0435\u043b\u044f\u0445 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u041f\u041e: \u043e\u0442 \u043a\u0440\u0438\u043f\u0442\u043e\u043c\u0430\u0439\u043d\u0435\u0440\u043e\u0432 \u0434\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c-\u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u0435\u0439.\n\n\u0412 \u0445\u043e\u0434\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u043e\u0432, \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 Red Canary, \u0430\u0442\u0430\u043a\u0443\u044e\u0449\u0438\u0439 \u043f\u043e\u0441\u043b\u0435 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b \u0434\u0432\u0430 \u043d\u043e\u0432\u044b\u0445 JAR-\u0444\u0430\u0439\u043b\u0430, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u0438\u043c\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b ActiveMQ. \u0422\u0430\u043a\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e \u0441\u0443\u0442\u0438 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u043e\u0433\u043e \u043f\u0430\u0442\u0447\u0430.\n\n\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0441\u0447\u0438\u0442\u0430\u044e\u0442, \u0447\u0442\u043e \u0442\u0430\u043a\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0441\u044f \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043e\u0432 \u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0437\u0430\u0449\u0438\u0442\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u043a\u0430\u043d\u0435\u0440\u043e\u0432 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043d\u0435\u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442.\n\n\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0431\u0438\u0442\u044c \u0441 \u0442\u043e\u043b\u043a\u0443 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432 \u043f\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438: \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u0430 \u0438 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438 \u043d\u0435 \u0431\u044b\u043b\u043e. \u0422\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c, \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f.\n\n\u0412 Red Canary \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u043b\u0438, \u0447\u0442\u043e \u044d\u0442\u0430 \u0442\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u043e\u0439 \u0438 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0440\u0435\u0434\u0430 \u043a\u0438\u0431\u0435\u0440\u0443\u0433\u0440\u043e\u0437. \u0425\u0430\u043a\u0435\u0440\u044b \u0432\u0441\u0451 \u0447\u0430\u0449\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442 \u043d\u0435\u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b, \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u0443\u044f\u0441\u044c \u043a \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0435 \u0431\u043e\u0440\u044c\u0431\u044b \u0437\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0432\u0437\u043b\u043e\u043c\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438. \u0423\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u043b\u0435 \u0435\u0451 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0441\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u043b\u0435\u0434\u043e\u0432, \u043d\u043e \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043e\u043a.\n\n\ud83d\udd17 \u0414\u0440\u0443\u0433\u0438\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043f\u0440\u043e \u0445\u0430\u043a\u0435\u0440\u043e\u0432, \u043c\u043e\u0448\u0435\u043d\u043d\u0438\u043a\u043e\u0432, \u0443\u0442\u0435\u0447\u043a\u0438 \u0438 \u0418\u0411 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u0434\u0435\u0441\u044c.", "creation_timestamp": "2026-07-30T00:02:53.517800Z"}, {"uuid": "524d897f-b489-4961-b78d-18b50cb8773c", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/cisoclub/2999", "content": "\u041e\u0431\u0437\u043e\u0440 #\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0437\u0430 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0443\u044e \u043d\u0435\u0434\u0435\u043b\u044e (22-29 \u043d\u043e\u044f\u0431\u0440\u044f)\n\n1\ufe0f\u20e3 \u0425\u0430\u043a\u0435\u0440\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 ownCloud (CVE-2023-49103), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0443\u0447\u0435\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u043f\u0430\u0440\u043e\u043b\u0438 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u043e\u043d\u043d\u044b\u0435 \ud83d\udd11\u043a\u043b\u044e\u0447\u0438 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445.\n\n2\ufe0f\u20e3 \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Google \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u0438 \u043e \u0432\u044b\u043f\u0443\u0441\u043a\u0435 \u044d\u043a\u0441\u0442\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \ud83c\udf0eChrome, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0434\u043d\u044f \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0434 \u0430\u0442\u0430\u043a\u0430\u043c\u0438.\n\n3\ufe0f\u20e3 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u041f\u041e Kinsing \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044e\u0442 \u2755\u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CVE-2023-46604 \u0432 Apache ActiveMQ \u0434\u043b\u044f \u0430\u0442\u0430\u043a \u043d\u0430 Linux-\u0441\u0438\u0441\u0442\u0435\u043c\u044b. \n\n4\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Akamai \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e\u0442, \u0447\u0442\u043e \u043d\u043e\u0432\u044b\u0439 \ud83d\udcbbMirai-\u0431\u043e\u0442\u043d\u0435\u0442 InfectedSlurs \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u0442 \u0434\u0432\u0435 0-day \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043d\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u0430\u0445 \u0438 NVR (Network Video Recorder).\n\n5\ufe0f\u20e3 \u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u044f Microsoft \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0430, \u0447\u0442\u043e \u0437\u0430 10 \u043b\u0435\u0442 \u0432\u044b\u043f\u043b\u0430\u0442\u0438\u043b\u0430 \ud83d\udcb563 \u043c\u043b\u043d. \u0434\u043e\u043b\u043b\u0430\u0440\u043e\u0432 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u043e\u0437\u043d\u0430\u0433\u0440\u0430\u0436\u0434\u0435\u043d\u0438\u044f \u00ab\u0431\u0435\u043b\u044b\u043c \u0445\u0430\u043a\u0435\u0440\u0430\u043c\u00bb, \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0432 \u0435\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445 \u0432\u043e\u0437\u043d\u0430\u0433\u0440\u0430\u0436\u0434\u0435\u043d\u0438\u044f \u0437\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a.\n\n6\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442\u044b \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0438, \u0447\u0442\u043e \u0434\u043b\u044f \u0430\u0442\u0430\u043a\u0438 \u043d\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e \ud83c\uddef\ud83c\uddf5Toyota Financial Services Europe &amp; Africa \u0445\u0430\u043a\u0435\u0440\u044b \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 CVE-2023-4966 \u0432 Citrix NetScaler.\n\n7\ufe0f\u20e3 \u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u044f Microsoft \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \ud83d\udee0\u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044e \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 Azure (CLI), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044e \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.\n\n8\ufe0f\u20e3 \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c Intel \u0438 AMD \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \ud83d\udd12\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u0438\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0432 \u043e\u0431\u0449\u0435\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c 130 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u0445, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0432 \u0438\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u0445.", "creation_timestamp": "2026-07-30T00:02:55.247371Z"}, {"uuid": "5bbc1ad7-12c8-4d07-b506-f5ce2f7742e1", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/cisoclub/2945", "content": "\u041e\u0431\u0437\u043e\u0440 #\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0437\u0430 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0443\u044e \u043d\u0435\u0434\u0435\u043b\u044e (1-6 \u043d\u043e\u044f\u0431\u0440\u044f)\n\n1\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Trend Micro \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u0438, \u0447\u0442\u043e Microsoft Exchange \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d \u0441\u0440\u0430\u0437\u0443 \u0447\u0435\u0442\u044b\u0440\u0435\u043c \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u043c \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0434\u043d\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \ud83e\uddb9\ud83c\udffc\u200d\u2642\ufe0f\u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438\u043b\u0438 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \n\n2\ufe0f\u20e3 \u0412 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Qnap \u0437\u0430\u044f\u0432\u0438\u043b\u0438 \u043e \u0434\u0432\u0443\u0445 \u2755\u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0441 \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u044f\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b QTS \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 NAS \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430.\n\n3\ufe0f\u20e3 \u041a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 Atlassian Confluence, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445, \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0445\u0430\u043a\u0435\u0440\u0430\u043c\u0438 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \ud83d\udcb5\u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u041f\u041e. \n\n4\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442\u044b \u00ab\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u041a\u0430\u0441\u043f\u0435\u0440\u0441\u043a\u043e\u0433\u043e\u00bb \u043f\u043e\u0434\u0435\u043b\u0438\u043b\u0438\u0441\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \ud83d\udcca\u0430\u043d\u0430\u043b\u0438\u0437\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0430\u0442\u0430\u043a\u0438 \u043a\u0430\u043c\u043f\u0430\u043d\u0438\u0438 \u00ab\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0422\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044f\u00bb. \u0412 \u0430\u0442\u0430\u043a\u0430\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c 5 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439, 4 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u044b\u043b\u0438 \u0440\u0430\u043d\u0435\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c\u0438 0-day \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438.\n\n5\ufe0f\u20e3 \u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e\u0442, \u0447\u0442\u043e \u0441\u0432\u044b\u0448\u0435 3 \u0442\u044b\u0441. \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 Apache ActiveMQ, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \ud83d\udcbb\u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0443\u044f\u0437\u0432\u0438\u043c\u044b \u043f\u0435\u0440\u0435\u0434 \u043d\u043e\u0432\u043e\u0439 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 RCE-\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c\u044e (CVE-2023-46604). \n\n6\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442\u044b Mandiant \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u043b\u0438, \u0447\u0442\u043e \u0445\u0430\u043a\u0435\u0440\u044b \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c Citrix Bleed (CVE-2023-4966) \u0434\u043b\u044f \ud83d\udd11\u043a\u0438\u0431\u0435\u0440\u0430\u0442\u0430\u043a \u043d\u0430 \u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438 \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438.\n\n7\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b \ud83d\udcbeproof-of-concept \u044d\u043a\u0441\u043f\u043b\u043e\u0438\u0442 \u0434\u043b\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 Wyze Cam v3, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0439 reverse shell \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438. \n\n8\ufe0f\u20e3 \u0412 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \ud83d\udcbdPoC-\u044d\u043a\u0441\u043f\u043b\u043e\u0438\u0442 \u0434\u043b\u044f \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 Cisco IOS XE (CVE-2023-20198), \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0443\u0436\u0435 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0445\u0430\u043a\u0435\u0440\u044b \u0434\u043b\u044f \u0432\u0437\u043b\u043e\u043c\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0442\u044b\u0441\u044f\u0447 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432.", "creation_timestamp": "2026-07-30T00:02:55.595541Z"}, {"uuid": "eb90181f-b391-45ac-a098-e1dbb4c812d8", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/reverseame/3992", "content": "Executing from Memory Using ActiveMQ CVE-2023-46604 https://vulncheck.com/blog/cve-2023-44604-activemq-in-memory", "creation_timestamp": "2026-08-03T02:07:12.641608Z"}, {"uuid": "e4a5c215-938c-42da-ac95-00816fa0bba8", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/reverseame/4012", "content": "CVE-2023-46604-Attacking &amp; Defending ActiveMQ https://www.prio-n.com/blog/cve-2023-46604-attacking-defending-ActiveMQ", "creation_timestamp": "2026-08-03T02:07:12.931993Z"}, {"uuid": "72552591-1f61-48ee-8d1b-017b661a2cef", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/thehackernews/4206", "content": "\ud83d\udea8 Apache ActiveMQ's CVE-2023-46604 flaw is under active exploitation by  hackers to distribute two dangerous programs: GoTitan, a Go-based botnet, and PrCtrl Rat, a .NET threat. \n \nRead details: https://thehackernews.com/2023/11/gotitan-botnet-spotted-exploiting.html", "creation_timestamp": "2023-11-29T06:11:47.000000Z"}, {"uuid": "ad062c47-902d-41be-a6ad-466c0ed3bd82", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/thehackernews/4088", "content": "\ud83d\udea8 Urgent: Thousands of internet-accessible ActiveMQ instances are at risk. \n \nHelloKitty ransomware group is actively exploiting a critical Remote Code Execution (RCE) flaw, CVE-2023-46604, in Apache ActiveMQ. \n \nFind details here \u27a1\ufe0f https://thehackernews.com/2023/11/hellokitty-ransomware-group-exploiting.html", "creation_timestamp": "2023-11-02T05:37:58.000000Z"}, {"uuid": "acabf689-21f6-417b-bb7e-82870f0c5309", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/thehackernews/4152", "content": "\u26a0\ufe0f New PoC exploit for CVE-2023-46604 flaw in Apache ActiveMQ could let attackers stealthily execute malicious code. \n \nCVSS score: 10.0! Are your servers secure? \n \nLearn more about this critical vulnerability: https://thehackernews.com/2023/11/new-poc-exploit-for-apache-activemq.html", "creation_timestamp": "2023-11-15T14:51:30.000000Z"}, {"uuid": "2c235cef-762d-49b4-8533-ec8869fe33a3", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/thehackernews/4434", "content": "Hackers Feast on Unpatched ActiveMQ!  CVE-2023-46604, a critical remote code execution flaw, is back in the spotlight. \n \nLearn more: https://thehackernews.com/2024/01/apache-activemq-flaw-exploited-in-new.html \n \nUpdate your Apache ASAP or risk ransomware, rootkits, and botnets.", "creation_timestamp": "2024-01-22T16:55:39.000000Z"}, {"uuid": "18acb2aa-4a91-4b7c-9785-d4837854428a", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/xakep_ru/15019", "content": "\u041c\u0430\u043b\u0432\u0430\u0440\u044c Kinsing \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 Apache ActiveMQ \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0440\u0443\u0442\u043a\u0438\u0442\u0430\n\n\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u043c\u0430\u043b\u0432\u0430\u0440\u0438 Kinsing \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044e\u0442 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CVE-2023-46604 \u0432 Apache ActiveMQ \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438 Linux-\u0441\u0438\u0441\u0442\u0435\u043c. \u041a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0446\u0435\u043b\u044c\u044e \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442\u043d\u044b\u0445 \u043c\u0430\u0439\u043d\u0435\u0440\u043e\u0432 \u043d\u0430 \u0432\u0437\u043b\u043e\u043c\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445.\n\nhttps://xakep.ru/2023/11/22/kinsing-apache-activemq/", "creation_timestamp": "2023-11-22T17:05:26.000000Z"}, {"uuid": "b2bde30e-c053-4ab1-bc8c-ba6048cd4b3d", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/xakep_ru/14940", "content": "\u0412\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u0438 \u0430\u0442\u0430\u043a\u0443\u044e\u0442 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 Apache ActiveMQ\n\n\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u043b\u0438, \u0447\u0442\u043e \u0431\u043e\u043b\u0435\u0435 3000 \u0442\u044b\u0441\u044f\u0447 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 Apache ActiveMQ, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0443\u044f\u0437\u0432\u0438\u043c\u044b \u043f\u0435\u0440\u0435\u0434 \u0441\u0432\u0435\u0436\u0435\u0439 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 RCE-\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c\u044e (CVE-2023-46604). \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0431\u0430\u0433 \u0443\u0436\u0435 \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u0435\u0442\u0441\u044f \u0430\u0442\u0430\u043a\u0430\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043b\u044c\u0449\u0438\u043a\u0430 HelloKitty.\n\nhttps://xakep.ru/2023/11/03/apache-activemq-rce/", "creation_timestamp": "2023-11-03T18:35:37.000000Z"}, {"uuid": "2506f6af-a44d-49b9-8ff2-110db2775629", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "Telegram/FLV6t7Va3c__w7z9N_mSu7nucQbg4vUfz1QpezNhFqmT_OM", "content": "", "creation_timestamp": "2026-05-02T21:00:04.000000Z"}, {"uuid": "2b237a2b-2259-41a9-b61d-c5a1bb879ff7", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/CyberBulletin/26743", "content": "\u26a1\ufe0fMauri Ransomware Exploits Apache ActiveMQ Flaw (CVE-2023-46604).\n\n#CyberBulletin", "creation_timestamp": "2024-12-09T13:14:22.000000Z"}, {"uuid": "f8130e7f-ba1c-466b-91e4-d48248ca3b61", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/CNArsenal/1462", "content": "https://github.com/sule01u/CVE-2023-46604\n#github #exploit", "creation_timestamp": "2023-11-08T14:05:09.000000Z"}, {"uuid": "942273fc-45a2-44bb-b4a7-87791c34f244", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/CNArsenal/1569", "content": "https://www.trendmicro.com/en_us/research/23/k/cve-2023-46604-exploited-by-kinsing.html\n\nCVE-2023-46604(Apache ActiveMQ)\u88ab\u5229\u7528\u6765\u611f\u67d3\u5bc6\u7801\u5668\u548cRootkit\u7cfb\u7edf\n#\u65b0\u95fb", "creation_timestamp": "2023-11-23T05:01:48.000000Z"}, {"uuid": "1a564445-e9b4-4b26-a39d-039fb5ca8640", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/CyberSecurityTechnologies/9449", "content": "#Malware_analysis\n1. Diamond Sleet supply chain compromise distributes a modified CyberLink installer\nhttps://www.microsoft.com/en-us/security/blog/2023/11/22/diamond-sleet-supply-chain-compromise-distributes-a-modified-cyberlink-installer\n2. HrServ - malware web shell DLL\nhttps://securelist.com/hrserv-apt-web-shell/111119\n3. CVE-2023-46604 (Apache ActiveMQ) Exploited to Infect Systems With Cryptominers and Rootkits\nhttps://www.trendmicro.com/en_us/research/23/k/cve-2023-46604-exploited-by-kinsing.html", "creation_timestamp": "2023-11-23T10:58:01.000000Z"}, {"uuid": "cb2b30d8-02cd-437b-9feb-6bef20e8c4c4", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/CyberSecurityTechnologies/9351", "content": "#tools\n#Blue_Team_Techniques\n1. ActiveMQ RCE vulnerability (CVE-2023-46604) verification/exploitation tool\nhttps://github.com/sule01u/CVE-2023-46604\n2. A comprehensive tool that provides an insightful analysis of MS monthly security updates\nhttps://github.com/xaitax/PatchaPalooza", "creation_timestamp": "2023-11-08T10:59:01.000000Z"}, {"uuid": "53f70451-93af-44a9-b766-89cbf1c23921", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/CyberSecurityTechnologies/9336", "content": "#exploit\n1. CVE-2023-22518:\nAn Exploitation tool to exploit the confluence server (Improper Authorization)\nhttps://github.com/sanjai-AK47/CVE-2023-22518\n\n2. CVE-2023-46604:\nAchieving a Reverse Shell Exploit for Apache ActiveMQ\nhttps://github.com/SaumyajeetDas/CVE-2023-46604-RCE-Reverse-Shell-Apache-ActiveMQ\n\n3. CVE-2023-37903:\nvm2 Sandbox Escape vulnerability\nhttps://github.com/7h3h4ckv157/CVE-2023-37903", "creation_timestamp": "2025-02-04T15:50:46.000000Z"}, {"uuid": "ace32a34-1c8c-4edd-9897-71e73eba87de", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/Rootsec_2/2000", "content": "#Malware_analysis\n1. Diamond Sleet supply chain compromise distributes a modified CyberLink installer\nhttps://www.microsoft.com/en-us/security/blog/2023/11/22/diamond-sleet-supply-chain-compromise-distributes-a-modified-cyberlink-installer\n2. HrServ - malware web shell DLL\nhttps://securelist.com/hrserv-apt-web-shell/111119\n3. CVE-2023-46604 (Apache ActiveMQ) Exploited to Infect Systems With Cryptominers and Rootkits\nhttps://www.trendmicro.com/en_us/research/23/k/cve-2023-46604-exploited-by-kinsing.html", "creation_timestamp": "2024-08-16T08:51:05.000000Z"}, {"uuid": "d4cb2bd1-3c98-44a8-b728-7098bf54e5b5", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/Rootsec_2/2005", "content": "https://www.trendmicro.com/en_us/research/23/k/cve-2023-46604-exploited-by-kinsing.html\n\nCVE-2023-46604(Apache ActiveMQ)\u88ab\u5229\u7528\u6765\u611f\u67d3\u5bc6\u7801\u5668\u548cRootkit\u7cfb\u7edf\n#\u65b0\u95fb", "creation_timestamp": "2024-08-16T08:51:06.000000Z"}, {"uuid": "785265e4-d5a3-4afd-b33f-fb75a4db8dfb", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/Rootsec_2/2053", "content": "#Malware_analysis\n1. Diamond Sleet supply chain compromise distributes a modified CyberLink installer\nhttps://www.microsoft.com/en-us/security/blog/2023/11/22/diamond-sleet-supply-chain-compromise-distributes-a-modified-cyberlink-installer\n2. HrServ - malware web shell DLL\nhttps://securelist.com/hrserv-apt-web-shell/111119\n3. CVE-2023-46604 (Apache ActiveMQ) Exploited to Infect Systems With Cryptominers and Rootkits\nhttps://www.trendmicro.com/en_us/research/23/k/cve-2023-46604-exploited-by-kinsing.html", "creation_timestamp": "2024-08-16T08:51:14.000000Z"}, {"uuid": "eb8addc4-2708-49f8-a13c-bf9e634a82bd", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/Rootsec_2/1642", "content": "#exploit\n1. CVE-2023-22518:\nAn Exploitation tool to exploit the confluence server (Improper Authorization)\nhttps://github.com/sanjai-AK47/CVE-2023-22518\n\n2. CVE-2023-46604:\nAchieving a Reverse Shell Exploit for Apache ActiveMQ\nhttps://github.com/SaumyajeetDas/CVE-2023-46604-RCE-Reverse-Shell-Apache-ActiveMQ\n\n3. CVE-2023-37903:\nvm2 Sandbox Escape vulnerability\nhttps://github.com/7h3h4ckv157/CVE-2023-37903", "creation_timestamp": "2024-08-16T08:43:34.000000Z"}, {"uuid": "47029d1b-07f7-4903-aa10-960d3e1e664f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/Rootsec_2/1662", "content": "#tools\n#Blue_Team_Techniques\n1. ActiveMQ RCE vulnerability (CVE-2023-46604) verification/exploitation tool\nhttps://github.com/sule01u/CVE-2023-46604\n2. A comprehensive tool that provides an insightful analysis of MS monthly security updates\nhttps://github.com/xaitax/PatchaPalooza", "creation_timestamp": "2024-08-16T08:43:35.000000Z"}, {"uuid": "57122be3-4547-45cb-9c48-a709fa6f0da7", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "Telegram/kcBXGeNIBmGVCv-daF2D_otXD8QiKxFj_3wywFGQYSfa", "content": "", "creation_timestamp": "2024-11-11T18:25:20.000000Z"}, {"uuid": "ae054f20-e365-4926-9a2d-9e45b66f697f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "Telegram/yjUnQ6hKYXBxzaCr4Cr42UE0MHqi1VzU3UchLcz_NxtZwAY", "content": "", "creation_timestamp": "2026-04-30T09:00:04.000000Z"}, {"uuid": "178e75ea-8761-4ee9-bf42-63d9e41f918e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/cisoclub/4458", "content": "\u0425\u0430\u043a\u0435\u0440 \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u043b \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0432\u0437\u043b\u043e\u043c\u0430, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0445 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u0432\n\n\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 Red Canary \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u0438 \u043e \u043d\u043e\u0432\u043e\u0439 \u0442\u0430\u043a\u0442\u0438\u043a\u0435, \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u0438 \u0430\u0442\u0430\u043a\u0430\u0445 \u043d\u0430 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435 Linux-\u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0417\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a, \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0447\u0435\u0440\u0435\u0437 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 Apache ActiveMQ (CVE-2023-46604), \u043f\u043e\u0441\u043b\u0435 \u0435\u0451 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0441\u0430\u043c \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u043b \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u2014 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0445\u0430\u043a\u0435\u0440\u043e\u0432 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439.\n\n\u0420\u0435\u0447\u044c \u0438\u0434\u0451\u0442 \u043e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0435 \u0432 Apache ActiveMQ \u2014 \u0431\u0440\u043e\u043a\u0435\u0440\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c. \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u0430\u044f \u0432 2023 \u0433\u043e\u0434\u0443, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0438\u0437-\u0437\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0438\u043f\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 OpenWire-\u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445. \u0425\u043e\u0442\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u0438 \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u044b \u043f\u043e\u0447\u0442\u0438 \u0434\u0432\u0430 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434, CVE-2023-46604 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0430\u0442\u0430\u043a\u0430\u0445, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u0446\u0435\u043b\u044f\u0445 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u041f\u041e: \u043e\u0442 \u043a\u0440\u0438\u043f\u0442\u043e\u043c\u0430\u0439\u043d\u0435\u0440\u043e\u0432 \u0434\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c-\u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u0435\u0439.\n\n\u0412 \u0445\u043e\u0434\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u043e\u0432, \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 Red Canary, \u0430\u0442\u0430\u043a\u0443\u044e\u0449\u0438\u0439 \u043f\u043e\u0441\u043b\u0435 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b \u0434\u0432\u0430 \u043d\u043e\u0432\u044b\u0445 JAR-\u0444\u0430\u0439\u043b\u0430, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u0438\u043c\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b ActiveMQ. \u0422\u0430\u043a\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e \u0441\u0443\u0442\u0438 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u043e\u0433\u043e \u043f\u0430\u0442\u0447\u0430.\n\n\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0441\u0447\u0438\u0442\u0430\u044e\u0442, \u0447\u0442\u043e \u0442\u0430\u043a\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0441\u044f \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043e\u0432 \u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0437\u0430\u0449\u0438\u0442\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u043a\u0430\u043d\u0435\u0440\u043e\u0432 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043d\u0435\u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442.\n\n\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0431\u0438\u0442\u044c \u0441 \u0442\u043e\u043b\u043a\u0443 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432 \u043f\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438: \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u0430 \u0438 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438 \u043d\u0435 \u0431\u044b\u043b\u043e. \u0422\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c, \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f.\n\n\u0412 Red Canary \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u043b\u0438, \u0447\u0442\u043e \u044d\u0442\u0430 \u0442\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u043e\u0439 \u0438 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0440\u0435\u0434\u0430 \u043a\u0438\u0431\u0435\u0440\u0443\u0433\u0440\u043e\u0437. \u0425\u0430\u043a\u0435\u0440\u044b \u0432\u0441\u0451 \u0447\u0430\u0449\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442 \u043d\u0435\u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b, \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u0443\u044f\u0441\u044c \u043a \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0435 \u0431\u043e\u0440\u044c\u0431\u044b \u0437\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0432\u0437\u043b\u043e\u043c\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438. \u0423\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u043b\u0435 \u0435\u0451 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0441\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u043b\u0435\u0434\u043e\u0432, \u043d\u043e \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043e\u043a.\n\n\ud83d\udd17 \u0414\u0440\u0443\u0433\u0438\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043f\u0440\u043e \u0445\u0430\u043a\u0435\u0440\u043e\u0432, \u043c\u043e\u0448\u0435\u043d\u043d\u0438\u043a\u043e\u0432, \u0443\u0442\u0435\u0447\u043a\u0438 \u0438 \u0418\u0411 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u0434\u0435\u0441\u044c.", "creation_timestamp": "2026-08-03T16:00:04.883121Z"}, {"uuid": "0337446f-ea8a-4c68-8969-2e15f8839fda", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/sysodmins/20037", "content": "\u0421\u043e\u0437\u0434\u0430\u043d \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u044d\u043a\u0441\u043f\u043b\u043e\u0438\u0442 \u0434\u043b\u044f \u0432\u0437\u043b\u043e\u043c\u0430 Apache ActiveMQ \u2328\ufe0f\n\n\u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f VulnCheck \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u043d\u043e\u0432\u0443\u044e \u0442\u0435\u0445\u043d\u0438\u043a\u0443 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 CVE-2023-46604 (CVSS: 10.0) \u0432 Apache ActiveMQ, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0443\u044e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0438. Apache \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 ActiveMQ 5.15.16, 5.16.7, 5.17.6 \u0438 5.18.3 \u2013 \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0433\u0440\u0443\u043f\u043f\u0430\u043c\u0438 \u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u0435\u0439.\n\n\u042d\u043a\u0441\u043f\u043b\u043e\u0438\u0442 VulnCheck \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 SpEL \u0432\u043c\u0435\u0441\u0442\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u00abinit-method\u00bb \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u0442\u0435\u0445 \u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0438 \u0434\u0430\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0448\u0435\u043b\u043b\u0430 (Reverse Shell). \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u0430\u0442\u0430\u043a\u0438, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0435\u0449\u0435 \u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u044b\u043c \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u044b ActiveMQ \ud83d\udda5\n\n\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \ud83e\udd78 \u0421\u0438\u0441\u0430\u0434\u043c\u0438\u043d", "creation_timestamp": "2023-11-17T02:42:33.000000Z"}, {"uuid": "e7feadd8-c826-4424-902e-497d840444d7", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/kiberdruzhinnik/59", "content": "HackTheBox Broker\n\n\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 CTF \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b HackTheBox \u0443\u0440\u043e\u0432\u043d\u044f Easy \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u041e\u0421 Linux, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u043e\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0434\u0430\u0432\u043d\u044e\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c RCE \u0432 \u0431\u0440\u043e\u043a\u0435\u0440\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 ActiveMQ (CVE-2023-46604), \u043f\u043e\u0434\u043d\u0438\u043c\u0435\u043c \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0434\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u0432 nginx.\n\n\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0441\u0432\u043e\u0439 \u0441\u043e\u0444\u0442 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u0430\u0442\u0447\u0430.\n\nhttps://blog.kiberdruzhinnik.ru/2023/11/hackthebox-broker/\n\n#hackthebox #writeup", "creation_timestamp": "2026-08-04T13:00:06.033439Z"}, {"uuid": "ea81e2b9-cf42-44c4-a509-1109ecf9e4fc", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://poliverso.org/objects/0477a01e-e8c8129d-b09e02c4de9c4f4a", "content": "Exploits and vulnerabilities in Q1 2026\nDuring Q1 2026, the exploit kits leveraged by threat actors to target user systems expanded once again, incorporating new exploits for the Microsoft Office platform, as well as Windows and Linux operating systems.\nIn this report, we dive into the statistics on published vulnerabilities and exploits, as well as the known vulnerabilities leveraged by popular C2 frameworks throughout Q1 2026.\nStatistics on registered vulnerabilities\nThis section provides statistical data on registered vulnerabilities. The data is sourced from cve.org.\nWe examine the number of registered CVEs for each month starting from January 2022. The total volume of vulnerabilities continues rising and, according to current reports, the use of AI agents for discovering security issues is expected to further reinforce this upward trend.\nTotal published vulnerabilities per month from 2022 through 2026 (download)\nNext, we analyze the number of new critical vulnerabilities (CVSS &gt; 8.9) over the same period.\nTotal critical vulnerabilities published per month from 2022 through 2026 (download)\nThe graph indicates that while the volume of critical vulnerabilities slightly decreased compared to previous years, an upward trend remained clearly visible. At present, we attribute this to the fact that the end of last year was marked by the disclosure of several severe vulnerabilities in web frameworks. The current growth is driven by high-profile issues like React2Shell, the release of exploit frameworks for mobile platforms, and the uncovering of secondary vulnerabilities during the remediation of previously discovered ones. We will be able to test this hypothesis in the next quarter; if correct, the second quarter will show a significant decline, similar to the pattern observed in the previous year.\nExploitation statistics\nThis section presents statistics on vulnerability exploitation for Q1 2026. The data draws on open sources and our telemetry.\nWindows and Linux vulnerability exploitation\nIn Q1 2026, threat actor toolsets were updated with exploits for new, recently registered vulnerabilities. However, we first examine the list of veteran vulnerabilities that consistently account for the largest share of detections:\n\nCVE-2018-0802: a remote code execution (RCE) vulnerability in the Equation Editor component\nCVE-2017-11882: another RCE vulnerability also affecting Equation Editor\nCVE-2017-0199: a vulnerability in Microsoft Office and WordPad that allows an attacker to gain control over the system\nCVE-2023-38831: a vulnerability resulting from the improper handling of objects contained within an archive\nCVE-2025-6218: a vulnerability allowing the specification of relative paths to extract files into arbitrary directories, potentially leading to malicious command execution\nCVE-2025-8088: a directory traversal bypass vulnerability during file extraction utilizing NTFS Streams\nAmong the newcomers, we have observed exploits targeting the Microsoft Office platform and Windows OS components. Notably, these new vulnerabilities exploit logic flaws arising from the interaction between multiple systems, making them technically difficult to isolate within a specific file or library. A list of these vulnerabilities is provided below:\n\nCVE-2026-21509 and CVE-2026-21514: security feature bypass vulnerabilities: despite Protected View being enabled, a specially crafted file can still execute malicious code without the user\u2019s knowledge. Malicious commands are executed on the victim\u2019s system with the privileges of the user who opened the file.\nCVE-2026-21513: a vulnerability in the Internet Explorer MSHTML engine, which is used to open websites and render HTML markup. The vulnerability involves bypassing rules that restrict the execution of files from untrusted network sources. Interestingly, the data provider for this vulnerability was an LNK file.\nThese three vulnerabilities were utilized together in a single chain during attacks on Windows-based user systems. While this combination is noteworthy, we believe the widespread use of the entire chain as a unified exploit will likely decline due to its instability. We anticipate that these vulnerabilities will eventually be applied individually as initial entry vectors in phishing campaigns.\nBelow is the trend of exploit detections on user Windows systems starting from Q1 2025.\nDynamics of the number of Windows users encountering exploits, Q1 2025 \u2013 Q1 2026. The number of users who encountered exploits in Q1 2025 is taken as 100% (download)\nThe vulnerabilities listed here can be leveraged to gain initial access to a vulnerable system and for privilege escalation. This underscores the critical importance of timely software updates.\nOn Linux devices, exploits for the following vulnerabilities were detected most frequently:\n\nCVE-2022-0847: a vulnerability known as Dirty Pipe, which enables privilege escalation and the hijacking of running applications\nCVE-2019-13272: a vulnerability caused by improper handling of privilege inheritance, which can be exploited to achieve privilege escalation\nCVE-2021-22555: a heap out-of-bounds write vulnerability in the Netfilter kernel subsystem\nCVE-2023-32233: a vulnerability in the Netfilter subsystem that allows for Use-After-Free conditions and privilege escalation through the improper processing of network requests\nDynamics of the number of Linux users encountering exploits, Q1 2025 \u2013 Q1 2026. The number of users who encountered exploits in Q1 2025 is taken as 100% (download)\nIn the first quarter of 2026, we observed a decrease in the number of detected exploits; however, the detection rates are on the rise relative to the same period last year. For the Linux operating system, the installation of security patches remains critical.\nMost common published exploits\nThe distribution of published exploits by software type in Q1 2026 features an updated set of categories; once again, we see exploits targeting operating systems and Microsoft Office suites.\nDistribution of published exploits by platform, Q1 2026 (download)\nVulnerability exploitation in APT attacks\nWe analyzed which vulnerabilities were utilized in APT attacks during Q1 2026. The ranking provided below includes data based on our telemetry, research, and open sources.\nTOP 10 vulnerabilities exploited in APT attacks, Q1 2026 (download)\nIn Q1 2026, threat actors continued to utilize high-profile vulnerabilities registered in the previous year for APT attacks. The hypothesis we previously proposed has been confirmed: security flaws affecting web applications remain heavily exploited in real-world attacks. However, we are also observing a partial refresh of attacker toolsets. Specifically, during the first quarter of the year, APT campaigns leveraged recently discovered vulnerabilities in Microsoft Office products, edge networking device software, and remote access management systems. Although the most recent vulnerabilities are being exploited most heavily, their general characteristics continue to reinforce established trends regarding the categories of vulnerable software. Consequently, we strongly recommend applying the security patches provided by vendors.\nC2 frameworks\nIn this section, we examine the most popular C2 frameworks used by threat actors and analyze the vulnerabilities targeted by the exploits that interacted with C2 agents in APT attacks.\nThe chart below shows the frequency of known C2 framework usage in attacks against users during Q1 2026, according to open sources.\nTOP 10 C2 frameworks used by APTs to compromise user systems, Q1 2026 (download)\nMetasploit has returned to the top of the list of the most common C2 frameworks, displacing Sliver, which now shares the second position with Havoc. These are followed by Covenant and Mythic, the latter of which previously saw greater popularity. After studying open sources and analyzing samples of malicious C2 agents that contained exploits, we determined that the following vulnerabilities were utilized in APT attacks involving the C2 frameworks mentioned above:\n\nCVE-2023-46604: an insecure deserialization vulnerability allowing for arbitrary code execution within the server process context if the Apache ActiveMQ service is running\nCVE-2024-12356 and CVE-2026-1731: command injection vulnerabilities in BeyondTrust software that allow an attacker to send malicious commands even without system authentication\nCVE-2023-36884: a vulnerability in the Windows Search component that enables command execution on the system, bypassing security mechanisms built into Microsoft Office applications\nCVE-2025-53770: an insecure deserialization vulnerability in Microsoft SharePoint that allows for unauthenticated command execution on the server\nCVE-2025-8088 and CVE-2025-6218: similar directory traversal vulnerabilities that allow files to be extracted from an archive to a predefined path, potentially without the archiving utility displaying any alerts to the user\nThe nature of the described vulnerabilities indicates that they were exploited to gain initial access to the system. Notably, the majority of these security issues are targeted to bypass authentication mechanisms. This is likely due to the fact that C2 agents are being detected effectively, prompting threat actors to reduce the probability of discovery by utilizing bypass exploits.\nNotable vulnerabilities\nThis section highlights the most significant vulnerabilities published in Q1 2026 that have publicly available descriptions.\nCVE-2026-21519: Desktop Window Manager vulnerability\nAt the core of this vulnerability is a Type Confusion flaw. By attempting to access a resource within the Desktop Window Manager subsystem, an attacker can achieve privilege escalation. A necessary condition for exploiting this issue is existing authorization on the system.\nIt is worth noting that the DWM subsystem has been under close scrutiny by threat actors for quite some time. Historically, the primary attack vector involves interacting with the NtDComposition* function set.\nRegPwn (CVE-2026-21533): a system settings access control vulnerability\nCVE-2026-21533 is essentially a logic vulnerability that enables privilege escalation. It stems from the improper handling of privileges within Remote Desktop Services (RDS) components. By modifying service parameters in the registry and replacing the configuration with a custom key, an attacker can elevate privileges to the SYSTEM level. This vulnerability is likely to remain a fixture in threat actor toolsets as a method for establishing persistence and gaining high-level privileges.\nCVE-2026-21514: a Microsoft Office vulnerability\nThis vulnerability was discovered in the wild during attacks on user systems. Notably, an LNK file is used to initiate the exploitation process. CVE-2026-21514 is also a logic issue that allows for bypassing OLE technology restrictions on malicious code execution and the transmission of NetNTLM authentication requests when processing untrusted input.\nClawdbot (CVE-2026-25253): an OpenClaw vulnerability\nThis vulnerability in the AI agent leaks credentials (authentication tokens) when queried via the WebSocket protocol. It can lead to the compromise of the infrastructure where the agent is installed: researchers have confirmed the ability to access local system data and execute commands with elevated privileges. The danger of CVE-2026-25253 is further compounded by the fact that its exploitation has generated numerous attack scenarios, including the use of prompt injections and ClickFix techniques to install stealers on vulnerable systems.\nCVE-2026-34070: LangChain framework vulnerability\nLangChain is an open-source framework designed for building applications powered by large language models (LLMs). A directory traversal vulnerability allowed attackers to access arbitrary files within the infrastructure where the framework was deployed. The core of CVE-2026-34070 lies in the fact that certain functions within langchain_core/prompts/loading.py handled configuration files insecurely. This could potentially lead to the processing of files containing malicious data, which could be leveraged to execute commands and expose critical system information or other sensitive files.\nCVE-2026-22812: an OpenCode vulnerability\nCVE-2026-22812 is another vulnerability identified in AI-assisted coding software. By default, the OpenCode agent provided local access for launching authorized applications via an HTTP server that did not require authentication. Consequently, attackers could execute malicious commands on a vulnerable device with the privileges of the current user.\nConclusion and advice\nWe observe that the registration of vulnerabilities is steadily gaining momentum in Q1 2026, a trend driven by the widespread development of AI tools designed to identify security flaws across various software types. This trajectory is likely to result not only in a higher volume of registered vulnerabilities but also in an increase in exploit-driven attacks, further reinforcing the critical necessity of timely security patch deployment. Additionally, organizations must prioritize vulnerability management and implement effective defensive technologies to mitigate the risks associated with potential exploitation.\nTo ensure the rapid detection of threats involving exploit utilization and to prevent their escalation, it is essential to deploy a reliable security solution. Key features of such a tool include continuous infrastructure monitoring, proactive protection, and vulnerability prioritization based on real-world relevance. These mechanisms are integrated into Kaspersky Next, which also provides endpoint security and protection against cyberattacks of any complexity. \nsecurelist.com/vulnerabilities\u2026", "creation_timestamp": "2026-05-07T10:52:25.889083Z"}, {"uuid": "8b45bcfd-f9ff-4a30-b8b7-66e78375417c", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "Telegram/ZCILXLquzGbXFQcaZlOXv9dkF48Tloh98M2Ojf7eGNskguU", "content": "", "creation_timestamp": "2026-08-29T23:00:04.254403Z"}, {"uuid": "11254f56-0313-496a-91c0-1a7715013747", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/cisoclub/2999", "content": "\u041e\u0431\u0437\u043e\u0440 #\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0437\u0430 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0443\u044e \u043d\u0435\u0434\u0435\u043b\u044e (22-29 \u043d\u043e\u044f\u0431\u0440\u044f)\n\n1\ufe0f\u20e3 \u0425\u0430\u043a\u0435\u0440\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 ownCloud (CVE-2023-49103), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0443\u0447\u0435\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u043f\u0430\u0440\u043e\u043b\u0438 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u043e\u043d\u043d\u044b\u0435 \ud83d\udd11\u043a\u043b\u044e\u0447\u0438 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445.\n\n2\ufe0f\u20e3 \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Google \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u0438 \u043e \u0432\u044b\u043f\u0443\u0441\u043a\u0435 \u044d\u043a\u0441\u0442\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \ud83c\udf0eChrome, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0434\u043d\u044f \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0434 \u0430\u0442\u0430\u043a\u0430\u043c\u0438.\n\n3\ufe0f\u20e3 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u041f\u041e Kinsing \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044e\u0442 \u2755\u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CVE-2023-46604 \u0432 Apache ActiveMQ \u0434\u043b\u044f \u0430\u0442\u0430\u043a \u043d\u0430 Linux-\u0441\u0438\u0441\u0442\u0435\u043c\u044b. \n\n4\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Akamai \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e\u0442, \u0447\u0442\u043e \u043d\u043e\u0432\u044b\u0439 \ud83d\udcbbMirai-\u0431\u043e\u0442\u043d\u0435\u0442 InfectedSlurs \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u0442 \u0434\u0432\u0435 0-day \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043d\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u0430\u0445 \u0438 NVR (Network Video Recorder).\n\n5\ufe0f\u20e3 \u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u044f Microsoft \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0430, \u0447\u0442\u043e \u0437\u0430 10 \u043b\u0435\u0442 \u0432\u044b\u043f\u043b\u0430\u0442\u0438\u043b\u0430 \ud83d\udcb563 \u043c\u043b\u043d. \u0434\u043e\u043b\u043b\u0430\u0440\u043e\u0432 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u043e\u0437\u043d\u0430\u0433\u0440\u0430\u0436\u0434\u0435\u043d\u0438\u044f \u00ab\u0431\u0435\u043b\u044b\u043c \u0445\u0430\u043a\u0435\u0440\u0430\u043c\u00bb, \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0432 \u0435\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445 \u0432\u043e\u0437\u043d\u0430\u0433\u0440\u0430\u0436\u0434\u0435\u043d\u0438\u044f \u0437\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a.\n\n6\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442\u044b \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0438, \u0447\u0442\u043e \u0434\u043b\u044f \u0430\u0442\u0430\u043a\u0438 \u043d\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e \ud83c\uddef\ud83c\uddf5Toyota Financial Services Europe &amp; Africa \u0445\u0430\u043a\u0435\u0440\u044b \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 CVE-2023-4966 \u0432 Citrix NetScaler.\n\n7\ufe0f\u20e3 \u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u044f Microsoft \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \ud83d\udee0\u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044e \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 Azure (CLI), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044e \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.\n\n8\ufe0f\u20e3 \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c Intel \u0438 AMD \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \ud83d\udd12\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u0438\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0432 \u043e\u0431\u0449\u0435\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c 130 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u0445, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0432 \u0438\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u0445.", "creation_timestamp": "2026-08-03T18:00:04.574858Z"}, {"uuid": "1a13c435-aa1f-4f38-bad0-374279c1924d", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/cisoclub/2945", "content": "\u041e\u0431\u0437\u043e\u0440 #\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0437\u0430 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0443\u044e \u043d\u0435\u0434\u0435\u043b\u044e (1-6 \u043d\u043e\u044f\u0431\u0440\u044f)\n\n1\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Trend Micro \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u0438, \u0447\u0442\u043e Microsoft Exchange \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d \u0441\u0440\u0430\u0437\u0443 \u0447\u0435\u0442\u044b\u0440\u0435\u043c \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u043c \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0434\u043d\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \ud83e\uddb9\ud83c\udffc\u200d\u2642\ufe0f\u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438\u043b\u0438 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \n\n2\ufe0f\u20e3 \u0412 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Qnap \u0437\u0430\u044f\u0432\u0438\u043b\u0438 \u043e \u0434\u0432\u0443\u0445 \u2755\u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0441 \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u044f\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b QTS \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 NAS \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430.\n\n3\ufe0f\u20e3 \u041a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 Atlassian Confluence, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445, \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0445\u0430\u043a\u0435\u0440\u0430\u043c\u0438 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \ud83d\udcb5\u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u041f\u041e. \n\n4\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442\u044b \u00ab\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u041a\u0430\u0441\u043f\u0435\u0440\u0441\u043a\u043e\u0433\u043e\u00bb \u043f\u043e\u0434\u0435\u043b\u0438\u043b\u0438\u0441\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \ud83d\udcca\u0430\u043d\u0430\u043b\u0438\u0437\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0430\u0442\u0430\u043a\u0438 \u043a\u0430\u043c\u043f\u0430\u043d\u0438\u0438 \u00ab\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0422\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044f\u00bb. \u0412 \u0430\u0442\u0430\u043a\u0430\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c 5 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439, 4 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u044b\u043b\u0438 \u0440\u0430\u043d\u0435\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c\u0438 0-day \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438.\n\n5\ufe0f\u20e3 \u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e\u0442, \u0447\u0442\u043e \u0441\u0432\u044b\u0448\u0435 3 \u0442\u044b\u0441. \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 Apache ActiveMQ, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \ud83d\udcbb\u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0443\u044f\u0437\u0432\u0438\u043c\u044b \u043f\u0435\u0440\u0435\u0434 \u043d\u043e\u0432\u043e\u0439 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 RCE-\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c\u044e (CVE-2023-46604). \n\n6\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442\u044b Mandiant \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u043b\u0438, \u0447\u0442\u043e \u0445\u0430\u043a\u0435\u0440\u044b \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c Citrix Bleed (CVE-2023-4966) \u0434\u043b\u044f \ud83d\udd11\u043a\u0438\u0431\u0435\u0440\u0430\u0442\u0430\u043a \u043d\u0430 \u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438 \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438.\n\n7\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b \ud83d\udcbeproof-of-concept \u044d\u043a\u0441\u043f\u043b\u043e\u0438\u0442 \u0434\u043b\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 Wyze Cam v3, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0439 reverse shell \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438. \n\n8\ufe0f\u20e3 \u0412 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \ud83d\udcbdPoC-\u044d\u043a\u0441\u043f\u043b\u043e\u0438\u0442 \u0434\u043b\u044f \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 Cisco IOS XE (CVE-2023-20198), \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0443\u0436\u0435 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0445\u0430\u043a\u0435\u0440\u044b \u0434\u043b\u044f \u0432\u0437\u043b\u043e\u043c\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0442\u044b\u0441\u044f\u0447 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432.", "creation_timestamp": "2026-08-03T19:00:04.843794Z"}, {"uuid": "e5f08ed3-6331-489a-8e73-beeb6098fe57", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "Telegram/ZCILXLquzGbXFQcaZlOXv9dkF48Tloh98M2Ojf7eGNskguU", "content": "", "creation_timestamp": "2026-08-30T00:00:09.556132Z"}, {"uuid": "b1c553bc-f92a-42aa-b10e-518cb0eb64b2", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/kiberdruzhinnik/59", "content": "HackTheBox Broker\n\n\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 CTF \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b HackTheBox \u0443\u0440\u043e\u0432\u043d\u044f Easy \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u041e\u0421 Linux, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u043e\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0434\u0430\u0432\u043d\u044e\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c RCE \u0432 \u0431\u0440\u043e\u043a\u0435\u0440\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 ActiveMQ (CVE-2023-46604), \u043f\u043e\u0434\u043d\u0438\u043c\u0435\u043c \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0434\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u0432 nginx.\n\n\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0441\u0432\u043e\u0439 \u0441\u043e\u0444\u0442 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u0430\u0442\u0447\u0430.\n\nhttps://blog.kiberdruzhinnik.ru/2023/11/hackthebox-broker/\n\n#hackthebox #writeup", "creation_timestamp": "2026-08-05T00:00:27.417013Z"}, {"uuid": "9ee8e4d9-0121-4b0b-aac8-caf829ce5a65", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/reverseame/3992", "content": "Executing from Memory Using ActiveMQ CVE-2023-46604 https://vulncheck.com/blog/cve-2023-44604-activemq-in-memory", "creation_timestamp": "2026-08-02T11:21:49.715534Z"}, {"uuid": "474440eb-6b37-45c7-9f29-adc2a86808b6", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/reverseame/4012", "content": "CVE-2023-46604-Attacking &amp; Defending ActiveMQ https://www.prio-n.com/blog/cve-2023-46604-attacking-defending-ActiveMQ", "creation_timestamp": "2026-08-02T11:21:50.136600Z"}, {"uuid": "486352d1-0b7e-4ca7-bed0-e8d0fbdc1a0b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/wh_lab/107", "content": "\ud83d\udc4b \u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0438!\n\n\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0447\u0442\u043e \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 @whitehat_chat \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0447\u0430\u0442\u0438\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0438 \u0437\u0430\u0434\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u0432\u0430\u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u0442\u0430\u043a \u0436\u0435 \u0442\u0430\u043c \"\u0436\u0438\u0432\u0435\u0442\" \u0431\u043e\u0442, \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c:\n\n\u25aa\ufe0f\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0442\u0438\u043f \u0445\u0435\u0448\u0430\n!hash a6105c0a611b41b08f1209506350279e\n\n\u25aa\ufe0f\u041f\u043e\u0438\u0441\u043a \u044d\u043a\u0441\u043f\u043b\u043e\u0438\u0442\u043e\u0432 \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e\n!ss Microsoft Exchange 2019\n\n\u25aa\ufe0f\u041f\u043e\u0438\u0441\u043a \u044d\u043a\u0441\u043f\u043b\u043e\u0438\u0442\u043e\u0432 (PoC) \u043f\u043e CVE\n!poc CVE-2023-46604\n\n\u25aa\ufe0f\u0423\u0437\u043d\u0430\u0435\u043c \u043f\u0430\u0440\u043e\u043b\u044c \u043f\u043e \u0431\u0430\u0437\u0435 (MD5, NTLM, SHA1 \u0438\u043b\u0438 SHA256)\n!check_hash a6105c0a611b41b08f1209506350279e\n\n\u25aa\ufe0f\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0440\u0442\u0430\n!port ya.ru 80\n\n\u25aa\ufe0f\u0421\u043f\u0438\u0441\u043e\u043a \u043c\u043e\u0441\u0442\u043e\u0432 \u0434\u043b\u044f Tor\n!bridges\n\n\u25aa\ufe0f\u0411\u043e\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438\n!feedback\n\n\u25aa\ufe0f\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f qr \u043a\u043e\u0434\u0430\n!qr https://t.me/wh_lab\n\n\u25aa\ufe0f\u0411\u043e\u0442 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f ID \u0444\u0430\u0439\u043b\u043e\u0432, \u044d\u043c\u043e\u0434\u0437\u0438, \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 \u0442.\u0434. (\u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0431\u043e\u0442\u043e\u0432)\n\n\ud83e\udd16 Get Any IDs\n\n#bot #chat\n\n\u2708\ufe0f Whitehat Lab", "creation_timestamp": "2026-08-04T13:00:23.473381Z"}, {"uuid": "2d1cc531-80dd-436c-94d1-010d05d512d3", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/cisoclub/2945", "content": "\u041e\u0431\u0437\u043e\u0440 #\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0437\u0430 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0443\u044e \u043d\u0435\u0434\u0435\u043b\u044e (1-6 \u043d\u043e\u044f\u0431\u0440\u044f)\n\n1\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Trend Micro \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u0438, \u0447\u0442\u043e Microsoft Exchange \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d \u0441\u0440\u0430\u0437\u0443 \u0447\u0435\u0442\u044b\u0440\u0435\u043c \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u043c \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0434\u043d\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \ud83e\uddb9\ud83c\udffc\u200d\u2642\ufe0f\u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438\u043b\u0438 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \n\n2\ufe0f\u20e3 \u0412 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Qnap \u0437\u0430\u044f\u0432\u0438\u043b\u0438 \u043e \u0434\u0432\u0443\u0445 \u2755\u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0441 \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u044f\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b QTS \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 NAS \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430.\n\n3\ufe0f\u20e3 \u041a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 Atlassian Confluence, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445, \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0445\u0430\u043a\u0435\u0440\u0430\u043c\u0438 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \ud83d\udcb5\u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u041f\u041e. \n\n4\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442\u044b \u00ab\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u041a\u0430\u0441\u043f\u0435\u0440\u0441\u043a\u043e\u0433\u043e\u00bb \u043f\u043e\u0434\u0435\u043b\u0438\u043b\u0438\u0441\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \ud83d\udcca\u0430\u043d\u0430\u043b\u0438\u0437\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0430\u0442\u0430\u043a\u0438 \u043a\u0430\u043c\u043f\u0430\u043d\u0438\u0438 \u00ab\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0422\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044f\u00bb. \u0412 \u0430\u0442\u0430\u043a\u0430\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c 5 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439, 4 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u044b\u043b\u0438 \u0440\u0430\u043d\u0435\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c\u0438 0-day \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438.\n\n5\ufe0f\u20e3 \u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e\u0442, \u0447\u0442\u043e \u0441\u0432\u044b\u0448\u0435 3 \u0442\u044b\u0441. \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 Apache ActiveMQ, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \ud83d\udcbb\u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0443\u044f\u0437\u0432\u0438\u043c\u044b \u043f\u0435\u0440\u0435\u0434 \u043d\u043e\u0432\u043e\u0439 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 RCE-\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c\u044e (CVE-2023-46604). \n\n6\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442\u044b Mandiant \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u043b\u0438, \u0447\u0442\u043e \u0445\u0430\u043a\u0435\u0440\u044b \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c Citrix Bleed (CVE-2023-4966) \u0434\u043b\u044f \ud83d\udd11\u043a\u0438\u0431\u0435\u0440\u0430\u0442\u0430\u043a \u043d\u0430 \u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438 \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438.\n\n7\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b \ud83d\udcbeproof-of-concept \u044d\u043a\u0441\u043f\u043b\u043e\u0438\u0442 \u0434\u043b\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 Wyze Cam v3, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0439 reverse shell \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438. \n\n8\ufe0f\u20e3 \u0412 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \ud83d\udcbdPoC-\u044d\u043a\u0441\u043f\u043b\u043e\u0438\u0442 \u0434\u043b\u044f \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 Cisco IOS XE (CVE-2023-20198), \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0443\u0436\u0435 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0445\u0430\u043a\u0435\u0440\u044b \u0434\u043b\u044f \u0432\u0437\u043b\u043e\u043c\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0442\u044b\u0441\u044f\u0447 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432.", "creation_timestamp": "2026-08-04T00:00:29.087205Z"}, {"uuid": "5eb8af8f-f727-4687-8b22-605b92dd39d5", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/cisoclub/2999", "content": "\u041e\u0431\u0437\u043e\u0440 #\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0437\u0430 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0443\u044e \u043d\u0435\u0434\u0435\u043b\u044e (22-29 \u043d\u043e\u044f\u0431\u0440\u044f)\n\n1\ufe0f\u20e3 \u0425\u0430\u043a\u0435\u0440\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 ownCloud (CVE-2023-49103), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0443\u0447\u0435\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u043f\u0430\u0440\u043e\u043b\u0438 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u043e\u043d\u043d\u044b\u0435 \ud83d\udd11\u043a\u043b\u044e\u0447\u0438 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445.\n\n2\ufe0f\u20e3 \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Google \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u0438 \u043e \u0432\u044b\u043f\u0443\u0441\u043a\u0435 \u044d\u043a\u0441\u0442\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \ud83c\udf0eChrome, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0434\u043d\u044f \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0434 \u0430\u0442\u0430\u043a\u0430\u043c\u0438.\n\n3\ufe0f\u20e3 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u041f\u041e Kinsing \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044e\u0442 \u2755\u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CVE-2023-46604 \u0432 Apache ActiveMQ \u0434\u043b\u044f \u0430\u0442\u0430\u043a \u043d\u0430 Linux-\u0441\u0438\u0441\u0442\u0435\u043c\u044b. \n\n4\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Akamai \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e\u0442, \u0447\u0442\u043e \u043d\u043e\u0432\u044b\u0439 \ud83d\udcbbMirai-\u0431\u043e\u0442\u043d\u0435\u0442 InfectedSlurs \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u0442 \u0434\u0432\u0435 0-day \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043d\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u0430\u0445 \u0438 NVR (Network Video Recorder).\n\n5\ufe0f\u20e3 \u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u044f Microsoft \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0430, \u0447\u0442\u043e \u0437\u0430 10 \u043b\u0435\u0442 \u0432\u044b\u043f\u043b\u0430\u0442\u0438\u043b\u0430 \ud83d\udcb563 \u043c\u043b\u043d. \u0434\u043e\u043b\u043b\u0430\u0440\u043e\u0432 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u043e\u0437\u043d\u0430\u0433\u0440\u0430\u0436\u0434\u0435\u043d\u0438\u044f \u00ab\u0431\u0435\u043b\u044b\u043c \u0445\u0430\u043a\u0435\u0440\u0430\u043c\u00bb, \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0432 \u0435\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445 \u0432\u043e\u0437\u043d\u0430\u0433\u0440\u0430\u0436\u0434\u0435\u043d\u0438\u044f \u0437\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a.\n\n6\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442\u044b \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0438, \u0447\u0442\u043e \u0434\u043b\u044f \u0430\u0442\u0430\u043a\u0438 \u043d\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e \ud83c\uddef\ud83c\uddf5Toyota Financial Services Europe &amp; Africa \u0445\u0430\u043a\u0435\u0440\u044b \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 CVE-2023-4966 \u0432 Citrix NetScaler.\n\n7\ufe0f\u20e3 \u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u044f Microsoft \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \ud83d\udee0\u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044e \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 Azure (CLI), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044e \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.\n\n8\ufe0f\u20e3 \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c Intel \u0438 AMD \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \ud83d\udd12\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u0438\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0432 \u043e\u0431\u0449\u0435\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c 130 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u0445, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0432 \u0438\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u0445.", "creation_timestamp": "2026-08-04T00:00:29.575721Z"}, {"uuid": "24e91bfa-01a4-445b-887e-c3a8f885f4eb", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/cisoclub/4458", "content": "\u0425\u0430\u043a\u0435\u0440 \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u043b \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0432\u0437\u043b\u043e\u043c\u0430, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0445 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u0432\n\n\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 Red Canary \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u0438 \u043e \u043d\u043e\u0432\u043e\u0439 \u0442\u0430\u043a\u0442\u0438\u043a\u0435, \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u0438 \u0430\u0442\u0430\u043a\u0430\u0445 \u043d\u0430 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435 Linux-\u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0417\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a, \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0447\u0435\u0440\u0435\u0437 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 Apache ActiveMQ (CVE-2023-46604), \u043f\u043e\u0441\u043b\u0435 \u0435\u0451 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0441\u0430\u043c \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u043b \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u2014 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0445\u0430\u043a\u0435\u0440\u043e\u0432 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439.\n\n\u0420\u0435\u0447\u044c \u0438\u0434\u0451\u0442 \u043e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0435 \u0432 Apache ActiveMQ \u2014 \u0431\u0440\u043e\u043a\u0435\u0440\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c. \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u0430\u044f \u0432 2023 \u0433\u043e\u0434\u0443, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0438\u0437-\u0437\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0438\u043f\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 OpenWire-\u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445. \u0425\u043e\u0442\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u0438 \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u044b \u043f\u043e\u0447\u0442\u0438 \u0434\u0432\u0430 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434, CVE-2023-46604 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0430\u0442\u0430\u043a\u0430\u0445, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u0446\u0435\u043b\u044f\u0445 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u041f\u041e: \u043e\u0442 \u043a\u0440\u0438\u043f\u0442\u043e\u043c\u0430\u0439\u043d\u0435\u0440\u043e\u0432 \u0434\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c-\u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u0435\u0439.\n\n\u0412 \u0445\u043e\u0434\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u043e\u0432, \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 Red Canary, \u0430\u0442\u0430\u043a\u0443\u044e\u0449\u0438\u0439 \u043f\u043e\u0441\u043b\u0435 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b \u0434\u0432\u0430 \u043d\u043e\u0432\u044b\u0445 JAR-\u0444\u0430\u0439\u043b\u0430, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u0438\u043c\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b ActiveMQ. \u0422\u0430\u043a\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e \u0441\u0443\u0442\u0438 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u043e\u0433\u043e \u043f\u0430\u0442\u0447\u0430.\n\n\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0441\u0447\u0438\u0442\u0430\u044e\u0442, \u0447\u0442\u043e \u0442\u0430\u043a\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0441\u044f \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043e\u0432 \u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0437\u0430\u0449\u0438\u0442\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u043a\u0430\u043d\u0435\u0440\u043e\u0432 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043d\u0435\u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442.\n\n\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0431\u0438\u0442\u044c \u0441 \u0442\u043e\u043b\u043a\u0443 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432 \u043f\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438: \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u0430 \u0438 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438 \u043d\u0435 \u0431\u044b\u043b\u043e. \u0422\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c, \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f.\n\n\u0412 Red Canary \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u043b\u0438, \u0447\u0442\u043e \u044d\u0442\u0430 \u0442\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u043e\u0439 \u0438 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0440\u0435\u0434\u0430 \u043a\u0438\u0431\u0435\u0440\u0443\u0433\u0440\u043e\u0437. \u0425\u0430\u043a\u0435\u0440\u044b \u0432\u0441\u0451 \u0447\u0430\u0449\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442 \u043d\u0435\u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b, \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u0443\u044f\u0441\u044c \u043a \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0435 \u0431\u043e\u0440\u044c\u0431\u044b \u0437\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0432\u0437\u043b\u043e\u043c\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438. \u0423\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u043b\u0435 \u0435\u0451 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0441\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u043b\u0435\u0434\u043e\u0432, \u043d\u043e \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043e\u043a.\n\n\ud83d\udd17 \u0414\u0440\u0443\u0433\u0438\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043f\u0440\u043e \u0445\u0430\u043a\u0435\u0440\u043e\u0432, \u043c\u043e\u0448\u0435\u043d\u043d\u0438\u043a\u043e\u0432, \u0443\u0442\u0435\u0447\u043a\u0438 \u0438 \u0418\u0411 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u0434\u0435\u0441\u044c.", "creation_timestamp": "2026-08-04T00:00:33.145719Z"}, {"uuid": "a90d796b-053a-460e-b677-48c5e9ee923b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "Telegram/Y77gHVTBkEwe_B8H7TYEkJj_P2j4BEeA0LI6LQ2vGbWCnCU", "content": "", "creation_timestamp": "2026-08-31T00:00:41.531157Z"}, {"uuid": "c1d1898e-9d3d-463e-8972-cc302244828b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/wh_lab/107", "content": "\ud83d\udc4b \u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0438!\n\n\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0447\u0442\u043e \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 @whitehat_chat \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0447\u0430\u0442\u0438\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0438 \u0437\u0430\u0434\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u0432\u0430\u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u0442\u0430\u043a \u0436\u0435 \u0442\u0430\u043c \"\u0436\u0438\u0432\u0435\u0442\" \u0431\u043e\u0442, \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c:\n\n\u25aa\ufe0f\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0442\u0438\u043f \u0445\u0435\u0448\u0430\n!hash a6105c0a611b41b08f1209506350279e\n\n\u25aa\ufe0f\u041f\u043e\u0438\u0441\u043a \u044d\u043a\u0441\u043f\u043b\u043e\u0438\u0442\u043e\u0432 \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e\n!ss Microsoft Exchange 2019\n\n\u25aa\ufe0f\u041f\u043e\u0438\u0441\u043a \u044d\u043a\u0441\u043f\u043b\u043e\u0438\u0442\u043e\u0432 (PoC) \u043f\u043e CVE\n!poc CVE-2023-46604\n\n\u25aa\ufe0f\u0423\u0437\u043d\u0430\u0435\u043c \u043f\u0430\u0440\u043e\u043b\u044c \u043f\u043e \u0431\u0430\u0437\u0435 (MD5, NTLM, SHA1 \u0438\u043b\u0438 SHA256)\n!check_hash a6105c0a611b41b08f1209506350279e\n\n\u25aa\ufe0f\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0440\u0442\u0430\n!port ya.ru 80\n\n\u25aa\ufe0f\u0421\u043f\u0438\u0441\u043e\u043a \u043c\u043e\u0441\u0442\u043e\u0432 \u0434\u043b\u044f Tor\n!bridges\n\n\u25aa\ufe0f\u0411\u043e\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438\n!feedback\n\n\u25aa\ufe0f\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f qr \u043a\u043e\u0434\u0430\n!qr https://t.me/wh_lab\n\n\u25aa\ufe0f\u0411\u043e\u0442 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f ID \u0444\u0430\u0439\u043b\u043e\u0432, \u044d\u043c\u043e\u0434\u0437\u0438, \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 \u0442.\u0434. (\u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0431\u043e\u0442\u043e\u0432)\n\n\ud83e\udd16 Get Any IDs\n\n#bot #chat\n\n\u2708\ufe0f Whitehat Lab", "creation_timestamp": "2026-08-05T00:00:39.525947Z"}, {"uuid": "56e239d2-7ccc-4ae2-b5fa-8fab6a32acd3", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/GithubRedTeam/87519", "content": "\ud83d\udea8 GitHub \u76d1\u63a7\u6d88\u606f\u63d0\u9192\n\n\ud83d\udea8 \u53d1\u73b0\u5173\u952e\u8bcd\uff1a #RCE #CVE\n\n\ud83d\udce6 \u9879\u76ee\u540d\u79f0\uff1a CVE-2023-46604-RCE\n\ud83d\udc64 \u9879\u76ee\u4f5c\u8005\uff1a REGGYRAIDER\n\ud83d\udee0 \u5f00\u53d1\u8bed\u8a00\uff1a Python\n\u2b50 Star\u6570\u91cf\uff1a 0  |  \ud83c\udf74 Fork\u6570\u91cf\uff1a 0\n\ud83d\udcc5 \u66f4\u65b0\u65f6\u95f4\uff1a 2026-06-06 05:18:26\n\n\ud83d\udcdd \u9879\u76ee\u63cf\u8ff0\uff1a\nCVE-2023-46604-RCE exploit with Linux reverse shell payload\n\n\ud83d\udd17 \u70b9\u51fb\u8bbf\u95ee\u9879\u76ee\u5730\u5740", "creation_timestamp": "2026-06-06T06:00:35.000000Z"}, {"uuid": "6ce79b9c-d0e8-4c94-b78f-91c29abcaf43", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/wh_lab/107", "content": "\ud83d\udc4b \u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0438!\n\n\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0447\u0442\u043e \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 @whitehat_chat \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0447\u0430\u0442\u0438\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0438 \u0437\u0430\u0434\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u0432\u0430\u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u0442\u0430\u043a \u0436\u0435 \u0442\u0430\u043c \"\u0436\u0438\u0432\u0435\u0442\" \u0431\u043e\u0442, \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c:\n\n\u25aa\ufe0f\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0442\u0438\u043f \u0445\u0435\u0448\u0430\n!hash a6105c0a611b41b08f1209506350279e\n\n\u25aa\ufe0f\u041f\u043e\u0438\u0441\u043a \u044d\u043a\u0441\u043f\u043b\u043e\u0438\u0442\u043e\u0432 \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e\n!ss Microsoft Exchange 2019\n\n\u25aa\ufe0f\u041f\u043e\u0438\u0441\u043a \u044d\u043a\u0441\u043f\u043b\u043e\u0438\u0442\u043e\u0432 (PoC) \u043f\u043e CVE\n!poc CVE-2023-46604\n\n\u25aa\ufe0f\u0423\u0437\u043d\u0430\u0435\u043c \u043f\u0430\u0440\u043e\u043b\u044c \u043f\u043e \u0431\u0430\u0437\u0435 (MD5, NTLM, SHA1 \u0438\u043b\u0438 SHA256)\n!check_hash a6105c0a611b41b08f1209506350279e\n\n\u25aa\ufe0f\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0440\u0442\u0430\n!port ya.ru 80\n\n\u25aa\ufe0f\u0421\u043f\u0438\u0441\u043e\u043a \u043c\u043e\u0441\u0442\u043e\u0432 \u0434\u043b\u044f Tor\n!bridges\n\n\u25aa\ufe0f\u0411\u043e\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438\n!feedback\n\n\u25aa\ufe0f\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f qr \u043a\u043e\u0434\u0430\n!qr https://t.me/wh_lab\n\n\u25aa\ufe0f\u0411\u043e\u0442 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f ID \u0444\u0430\u0439\u043b\u043e\u0432, \u044d\u043c\u043e\u0434\u0437\u0438, \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 \u0442.\u0434. (\u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0431\u043e\u0442\u043e\u0432)\n\n\ud83e\udd16 Get Any IDs\n\n#bot #chat\n\n\u2708\ufe0f Whitehat Lab", "creation_timestamp": "2026-08-06T00:00:44.227841Z"}, {"uuid": "f8345756-6eb0-4c93-bacd-f1ae38eec259", "vulnerability_lookup_origin": "caeb2787-0d58-4236-9039-7c86c3e566f3", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://vulnerability.circl.lu/known-exploited-vulnerabilities-catalog/a56be3b9-64ba-455d-aa9d-985b56d4b042", "content": "", "creation_timestamp": "2026-06-19T12:46:46.619590Z"}, {"uuid": "62244544-b891-4a57-8b04-7344ec078ba7", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://gist.github.com/ShaiOnionGod/bb378bb47a2626f2a0b85bb402724549", "content": "\n\n  \n    \n    \n    Axonius \u2014 Dashboard prototype\n    \n    \n      {\n        \"imports\": {\n          \"react\": \"https://esm.sh/react@18.3.1\",\n          \"react-dom\": \"https://esm.sh/react-dom@18.3.1\",\n          \"react-dom/client\": \"https://esm.sh/react-dom@18.3.1/client\",\n          \"lucide-react\": \"https://esm.sh/lucide-react@0.456.0?deps=react@18.3.1\"\n        }\n      }\n    \n    \n    \n      html, body { margin: 0; height: 100%; background: #191A23; font-family: 'Hanken Grotesk', -apple-system, BlinkMacSystemFont, sans-serif; }\n      #root { height: 100%; }\n      .sb-tag { position: fixed; right: 14px; bottom: 12px; z-index: 99999; font: 700 10px/1 ui-monospace, monospace; letter-spacing: .14em; color: #0D5ED7; background: rgba(255,255,255,.9); border: 1px solid #E0E4EC; border-radius: 999px; padding: 6px 10px; box-shadow: 0 6px 18px rgba(27,32,70,.12); pointer-events: none; }\n    \n  \n  \n    \n\n    \nSANDBOX\n\n    \nimport React, { useState, useRef, useCallback, useEffect } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport { createPortal } from \"react-dom\";\nimport {\n  Search, Star, MoreHorizontal, Info, ListFilter, ArrowUpDown, Columns3,\n  Plus, ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight, ChevronDown,\n  ArrowUpRight, ArrowDownRight, LayoutGrid, Server, ShieldCheck, Boxes,\n  Workflow, Cable, Bell, CircleHelp, Clock, Play, Grip, PanelLeftClose,\n  PanelLeftOpen, Download, GripVertical, X, Settings, ShieldAlert, Crosshair,\n  Pin, PinOff, RotateCw, Filter, Table2, ChevronsUpDown, Pencil, Check, Trash2,\n  Users, Layers, RotateCcw, Save, Copy, Calendar, Menu, Zap, Link, BarChart3, Sun, Moon,\n  Globe, Lock, Folder, FolderOpen\n} from \"lucide-react\";\n\n/**\n * Axonius \u2014 Dashboard + Assets table views\n * Collapsible side panel \u00b7 resizable + reorderable dashboard tiles\n * Real Axonius header \u00b7 Twenty-style table \u00b7 tokens from Figma source\n */\n\nfunction AxoniusLogo() {\n  return `.replaceAll('fill=\"black\"', `fill=\"${T.ink}\"`) }} /&gt;;\n}\n\n// Data / highlight palette \u2014 bright fills used in both themes (light-mode text variants applied where colored text is needed)\nconst VIZ = { green: \"#5BC4BF\", greenDeep: \"#247D78\", mint: \"#8ED0FF\", lilac: \"#AD85FF\", lilacPale: \"#CDB4FF\", orange: \"#FF8C66\", amber: \"#FFB286\" };\nconst FONT = \"'Hanken Grotesk', -apple-system, sans-serif\", DISPLAY = \"'Schibsted Grotesk', -apple-system, sans-serif\";\nconst THEMES = {\n  dark: {\n    ink: \"#E4E8F0\", body: \"#AEB7CC\", muted: \"#8494B5\", faint: \"#69738C\",\n    line: \"rgba(132,148,181,0.20)\", lineSoft: \"rgba(132,148,181,0.12)\", hair: \"rgba(132,148,181,0.09)\", lineStrong: \"rgba(132,148,181,0.42)\",\n    bg100: \"#AEB7CC\", bg90: \"#9AA3BC\", bg80: \"#8494B5\", bg40: \"#8494B5\",\n    blue: \"#5C7CFF\", blueDeep: \"#4E6CF5\", green: \"#5BC4BF\", red: \"#FF8C66\",\n    shell: \"#191A23\", headerBg: \"#191A23\", canvas: \"#191A23\", surface: \"#222431\", surface2: \"#2A2D3C\", control: \"#262838\",\n    white: \"#FFFFFF\", onAccent: \"#191A23\", isLight: false, coin: \"#2A2D3C\", accentSoft: \"rgba(92,124,255,0.16)\", accentText: \"#5C7CFF\", accentBorder: \"rgba(92,124,255,0.50)\",\n    viz: VIZ, shadow: \"0 1px 2px rgba(0,0,0,0.4), 0 14px 34px rgba(0,0,0,0.5)\", font: FONT, display: DISPLAY,\n  },\n  light: {\n    ink: \"#2E3850\", body: \"#465472\", muted: \"#6B7894\", faint: \"#8494B5\",\n    line: \"rgba(132,148,181,0.30)\", lineSoft: \"rgba(132,148,181,0.18)\", hair: \"rgba(132,148,181,0.12)\", lineStrong: \"rgba(132,148,181,0.55)\",\n    bg100: \"#465472\", bg90: \"#5A6889\", bg80: \"#8494B5\", bg40: \"#8494B5\",\n    blue: \"#4361EE\", blueDeep: \"#3A55D6\", green: \"#247D78\", red: \"#BF4B26\",\n    shell: \"#F9FAFB\", headerBg: \"#F9FAFB\", canvas: \"#FFFFFF\", surface: \"#FFFFFF\", surface2: \"#F1F2F6\", control: \"#FFFFFF\",\n    white: \"#FFFFFF\", onAccent: \"#FFFFFF\", isLight: true, coin: \"#FFFFFF\", accentSoft: \"rgba(67,97,238,0.10)\", accentText: \"#4361EE\", accentBorder: \"rgba(67,97,238,0.45)\",\n    viz: VIZ, shadow: \"0 1px 2px rgba(70,84,114,0.06), 0 10px 26px rgba(70,84,114,0.08)\", font: FONT, display: DISPLAY,\n  },\n};\nlet T = THEMES.dark;\n// Severity scale stays semantic (red \u2192 orange \u2192 yellow \u2192 green, neutral for informational) in both themes\nconst SEVC = { critical: \"#E5484D\", high: \"#F0743E\", medium: \"#F5C28C\", low: \"#4F8FE3\", info: \"#CFC4F2\" };\nconst fmt = (n) =&gt; n.toLocaleString(\"en-US\");\nconst tnum = { fontFeatureSettings: '\"tnum\" 1', fontVariantNumeric: \"tabular-nums\" };\n\n/* ============ vendor logos ============ */\nfunction LogoMark({ brand, size = 32 }) {\n  const glyph = {\n    aws: aws,\n    microsoft: ,\n    azure: ,\n    googlecloud: ,\n    oracle: ,\n    vmware: vm,\n    okta: ,\n    crowdstrike: ,\n    active_directory: ,\n    sentinelone: ,\n    service_now: ,\n    cisco: cisco,\n    cisco_meraki: ,\n    cisco_ise: cisco,\n    checkpoint: ,\n    chef: ,\n    claroty: ,\n    cylance: ,\n    epo: ,\n    paloalto: ,\n    tanium: ,\n    tenable: ,\n    forescout: ,\n    zoom: ,\n    miro: ,\n    dropbox: ,\n    salesforce: ,\n    slack: ,\n    office365: ,\n    google_workspace: ,\n  }[brand] || {(brand || \"?\").slice(0, 2).toUpperCase()};\n  return \n{glyph};\n}\n\n/* ============ chips ============ */\n// Tags use the dashboard data palette (turquoise / purple / baby-blue / orange) \u2014 dark text variant in light mode, bright in dark\nconst TAGV = [{ b: \"#5BC4BF\", d: \"#247D78\" }, { b: \"#AD85FF\", d: \"#683CB5\" }, { b: \"#8ED0FF\", d: \"#1E75B3\" }, { b: \"#FF8C66\", d: \"#BF4B26\" }];\nfunction Tag({ label }) {\n  let n = 0; for (let i = 0; i &lt; label.length; i++) n = (n * 31 + label.charCodeAt(i)) &gt;&gt;&gt; 0;\n  const t = TAGV[n % TAGV.length];\n  return {label};\n}\n// Cursor-following tooltip (like sandbox 2) \u2014 surface card with readable dark text\nfunction FloatTip({ x, y, children }) {\n  return createPortal(\n{children}, document.body);\n}\nfunction UserAvatar({ name, size = 24 }) {\n  const s = name || \"?\"; let n = 0; for (let i = 0; i &lt; s.length; i++) n = (n * 31 + s.charCodeAt(i)) &gt;&gt;&gt; 0;\n  const t = TAGV[n % TAGV.length];\n  return {s.trim()[0] || \"?\"};\n}\nconst APP_LOGO_MAP = {\n  Zoom: \"zoom\", \"Zoom One Pro\": \"zoom\",\n  Miro: \"miro\",\n  Dropbox: \"dropbox\",\n  Salesforce: \"salesforce\",\n  Slack: \"slack\",\n  Google: \"googlecloud\", \"Google WS Ent. Starter\": \"google_workspace\", \"Google WS Ent. Standard\": \"google_workspace\", \"Google WS Business\": \"google_workspace\",\n  Office365: \"office365\", \"Microsoft 365 G3 GCC\": \"office365\", \"Microsoft 365 E5\": \"office365\", \"Microsoft Power Aut\u2026\": \"office365\",\n  Microsoft: \"microsoft\",\n};\nfunction AppAvatar({ name, size = 22 }) {\n  const brand = APP_LOGO_MAP[name];\n  if (brand) return ;\n  const s = name || \"?\"; let n = 0; for (let i = 0; i &lt; s.length; i++) n = (n * 31 + s.charCodeAt(i)) &gt;&gt;&gt; 0;\n  const t = TAGV[n % TAGV.length];\n  return {s.trim()[0] || \"?\"};\n}\nconst STATUS = { Active: T.green, Warning: T.viz.amber, Inactive: T.faint, Error: T.red };\nfunction StatusChip({ status }) {\n  return {status};\n}\nconst RISK = { Critical: SEVC.critical, High: SEVC.high, Medium: SEVC.medium, Low: SEVC.low };\nfunction RiskChip({ level }) {\n  const c = RISK[level];\n  return {level};\n}\nfunction Delta({ up, children }) {\n  const color = up ? T.green : T.red;\n  return {up ?  : }{children};\n}\nfunction IconBtn({ children, onClick }) {\n  const [h, setH] = useState(false);\n  return  setH(true)} onMouseLeave={() =&gt; setH(false)} style={{ width: 26, height: 26, borderRadius: 6, border: \"none\", cursor: \"pointer\", background: h ? T.surface2 : \"transparent\", color: h ? T.ink : T.faint, display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}&gt;{children};\n}\n\n/* ============ KPIs ============ */\nconst KPIS = [\n  { label: \"Total Assets\", value: 84355, delta: \"12.4%\", up: true },\n  { label: \"Cloud Coverage\", value: 96.2, suffix: \"%\", delta: \"2.1%\", up: true },\n  { label: \"Open Vulnerabilities\", value: 382, delta: \"8.0%\", up: false },\n  { label: \"Unmanaged Devices\", value: 1204, delta: \"3.2%\", up: false },\n];\nfunction useCountUp(target, dur = 950) {\n  const [v, setV] = useState(0);\n  useEffect(() =&gt; {\n    let raf; const start = performance.now();\n    const tick = (now) =&gt; { const p = Math.min(1, (now - start) / dur); setV(target * (1 - Math.pow(1 - p, 3))); if (p &lt; 1) raf = requestAnimationFrame(tick); };\n    raf = requestAnimationFrame(tick); return () =&gt; cancelAnimationFrame(raf);\n  }, [target]);\n  return v;\n}\nfunction KpiValue({ value, suffix }) {\n  const v = useCountUp(value);\n  const text = suffix === \"%\" ? v.toFixed(1) : fmt(Math.round(v));\n  return {text}{suffix || \"\"};\n}\nfunction KpiRow() {\n  return (\n    \n\n      {KPIS.map((k, i) =&gt; (\n        \n\n          \n{k.label}\n          \n\n            \n            {k.delta}\n          \n        \n      ))}\n    \n  );\n}\n\n/* ============ chart bodies ============ */\nconst PIE = [\n  { c: \"green\", label: \"Windows Assets\", val: 1236 }, { c: \"greenDeep\", label: \"Active Directory\", val: 411 },\n  { c: \"mint\", label: \"SCCM Managed\", val: 198 }, { c: \"lilac\", label: \"Intune Managed\", val: 89 }, { c: \"lilacPale\", label: \"Unmanaged\", val: 43 },\n];\nfunction DonutBody() {\n  const [hi, setHi] = useState(null);\n  const [tip, setTip] = useState(null);\n  const [off, setOff] = useState(() =&gt; new Set());\n  const [drawn, setDrawn] = useState(false);\n  useEffect(() =&gt; { const id = setTimeout(() =&gt; setDrawn(true), 60); return () =&gt; clearTimeout(id); }, []);\n  const r = 46, sw = 14, C = 2 * Math.PI * r, gap = 5;\n  const toggle = (i) =&gt; setOff(s =&gt; { const n = new Set(s); n.has(i) ? n.delete(i) : n.add(i); return n; });\n  const visTotal = PIE.reduce((a, p, i) =&gt; a + (off.has(i) ? 0 : p.val), 0) || 1;\n  let acc = 0;\n  const segs = PIE.map((p, i) =&gt; {\n    if (off.has(i)) return null;\n    const len = (p.val / visTotal) * C;\n    const seg = Math.max(1, len - gap);\n    const active = hi === i, dim = hi !== null &amp;&amp; !off.has(hi) &amp;&amp; !active;\n    const node = (\n       { setHi(i); setTip({ i, x: e.clientX, y: e.clientY }); }} onMouseMove={(e) =&gt; setTip({ i, x: e.clientX, y: e.clientY })} onMouseLeave={() =&gt; { setHi(null); setTip(null); }} onClick={() =&gt; toggle(i)}\n        style={{ opacity: dim ? 0.35 : 1, cursor: \"pointer\", transition: \"stroke-dasharray .8s cubic-bezier(.22,1,.36,1), stroke-width .18s ease, opacity .18s ease\" }} /&gt;\n    );\n    acc += len; return node;\n  });\n  const liveHi = hi !== null &amp;&amp; !off.has(hi);\n  const center = liveHi ? { big: ((PIE[hi].val / visTotal) * 100).toFixed(1) + \"%\", small: PIE[hi].label } : { big: fmt(visTotal), small: \"Total Assets\" };\n  return (\n    \n\n      \n\n        \n          \n          {segs}\n        \n        \n\n          {center.big}\n          {center.small}\n        \n      \n      \n\n        {PIE.map((p, i) =&gt; {\n          const isOff = off.has(i);\n          return (\n            \n { setHi(i); if (!isOff) setTip({ i, x: e.clientX, y: e.clientY }); }} onMouseMove={(e) =&gt; !isOff &amp;&amp; setTip({ i, x: e.clientX, y: e.clientY })} onMouseLeave={() =&gt; { setHi(null); setTip(null); }} onClick={() =&gt; toggle(i)}\n              title={isOff ? \"Click to show\" : \"Click to hide\"}\n              style={{ display: \"flex\", alignItems: \"center\", gap: 9, padding: \"5px 6px\", borderRadius: 6, cursor: \"pointer\", background: hi === i &amp;&amp; !isOff ? T.canvas : \"transparent\", transition: \"background .12s\" }}&gt;\n              \n              {p.label}\n              {isOff ? \"Hidden\" : (hi === i ? fmt(p.val) : ((p.val / visTotal) * 100).toFixed(1) + \"%\")}\n            \n          );\n        })}\n      \n      {tip !== null &amp;&amp; !off.has(tip.i) &amp;&amp; \n        \n{PIE[tip.i].label}\n        \n{fmt(PIE[tip.i].val)}\n        \n{(PIE[tip.i].val / visTotal * 100).toFixed(1)}% of assets\n      }\n    \n  );\n}\nconst LINE_LABELS = [\"W1\", \"W2\", \"W3\", \"W4\", \"W5\", \"W6\", \"W7\", \"W8\", \"W9\", \"W10\", \"W11\", \"W12\"];\nconst LINE_SERIES = [\n  { key: \"all\", label: \"All Devices\", color: T.viz.green, pts: [38000, 41200, 44500, 47800, 51000, 55300, 59800, 63200, 68500, 72100, 78400, 84355] },\n  { key: \"managed\", label: \"Managed\", color: T.viz.lilac, pts: [29000, 31000, 33500, 35800, 38000, 41000, 44500, 47200, 50500, 54100, 58400, 61200] },\n  { key: \"cloud\", label: \"Cloud\", color: T.viz.orange, pts: [8000, 9200, 10500, 11800, 13000, 14300, 15800, 17200, 18500, 20100, 21400, 22097] },\n  { key: \"unmanaged\", label: \"Unmanaged\", color: T.viz.greenDeep, pts: [3200, 3100, 3300, 3000, 3500, 3300, 3100, 2900, 2700, 2500, 2300, 2100] },\n];\nfunction LineBody() {\n  const [off, setOff] = useState(() =&gt; new Set());\n  const [hov, setHov] = useState(null);\n  const w = 680, h = 196, pad = 12, n = LINE_LABELS.length, max = 90000;\n  const X = (i) =&gt; pad + (i / (n - 1)) * (w - pad * 2);\n  const Y = (v) =&gt; h - pad - (v / max) * (h - pad * 2);\n  const smooth = (pts) =&gt; { let d = `M ${X(0)} ${Y(pts[0])}`; for (let i = 1; i &lt; n; i++) { const cx = (X(i - 1) + X(i)) / 2; d += ` C ${cx} ${Y(pts[i - 1])}, ${cx} ${Y(pts[i])}, ${X(i)} ${Y(pts[i])}`; } return d; };\n  const toggle = (k) =&gt; setOff(s =&gt; { const x = new Set(s); x.has(k) ? x.delete(k) : x.add(k); return x; });\n  const visible = LINE_SERIES.filter(s =&gt; !off.has(s.key));\n  const xPct = (i) =&gt; (X(i) / w) * 100, yPct = (v) =&gt; (Y(v) / h) * 100;\n  return (\n    \n\n      \n setHov(null)}&gt;\n        \n          {[0, 1, 2, 3].map(i =&gt; )}\n          {hov &amp;&amp; }\n          {visible.map(s =&gt; )}\n        \n        {/* a hoverable dot on every point \u2014 hovering one shows just that series */}\n        {visible.map(s =&gt; s.pts.map((v, i) =&gt; {\n          const isHov = hov &amp;&amp; hov.s.key === s.key &amp;&amp; hov.i === i, dim = hov &amp;&amp; !isHov;\n          return (\n            \n setHov({ s, i })}\n              style={{ position: \"absolute\", left: `${xPct(i)}%`, top: `${yPct(v)}%`, transform: \"translate(-50%, -50%)\", width: 20, height: 20, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", cursor: \"pointer\", zIndex: isHov ? 4 : 2 }}&gt;\n              \n            \n          );\n        }))}\n        {hov &amp;&amp; (\n          \n n - 4 ? \"calc(-100% - 12px)\" : hov.i &lt; 3 ? \"12px\" : \"-50%\"}, calc(-100% - 14px))`, background: T.surface, border: `1px solid ${T.line}`, borderRadius: 10, boxShadow: T.shadow, padding: \"9px 12px\", whiteSpace: \"nowrap\", pointerEvents: \"none\", zIndex: 6 }}&gt;\n            \n{hov.s.label}\n            \n{fmt(hov.s.pts[hov.i])}\n            {hov.i &gt; 0 &amp;&amp; (() =&gt; { const pct = (hov.s.pts[hov.i] - hov.s.pts[hov.i - 1]) / hov.s.pts[hov.i - 1] * 100; const up = pct &gt;= 0; return \n{up ?  : }{up ? \"+\" : \"\"}{pct.toFixed(1)}% from previous; })()}\n            \n{LINE_LABELS[hov.i]}\n          \n        )}\n      \n      \n\n        {LINE_SERIES.map(s =&gt; {\n          const isOff = off.has(s.key);\n          return (\n             toggle(s.key)} title={isOff ? \"Show series\" : \"Hide series\"} className=\"ax-press\"\n              style={{ display: \"inline-flex\", alignItems: \"center\", gap: 6, padding: \"3px 9px\", borderRadius: 999, border: `1px solid ${isOff ? T.lineSoft : T.line}`, background: isOff ? \"transparent\" : T.canvas, cursor: \"pointer\", fontFamily: T.font, fontSize: 11.5, fontWeight: 500, color: isOff ? T.faint : T.body, transition: \"all .14s\" }}&gt;\n              \n              {s.label}\n            \n          );\n        })}\n      \n    \n  );\n}\nconst STACK = [[\"Jan\", 40, 25, 20], [\"Feb\", 35, 30, 15], [\"Mar\", 52, 22, 26], [\"Apr\", 30, 35, 18], [\"May\", 48, 28, 24], [\"Jun\", 58, 32, 28]];\nconst STACK_KEYS = [[\"Cloud\", T.viz.green], [\"On-prem\", T.viz.mint], [\"SaaS\", T.viz.lilac]];\nfunction StackedBody() {\n  const [hi, setHi] = useState(null);\n  const [tip, setTip] = useState(null);\n  const max = 130;\n  return (\n    \n\n      {tip &amp;&amp; \n{STACK[tip.i][0]}\n{fmt((STACK[tip.i][1] + STACK[tip.i][2] + STACK[tip.i][3]) * 86)}\ntotal assets}\n      \n\n        {[0, 1, 2, 3].map(i =&gt; \n)}\n        {STACK.map((s, i) =&gt; {\n          const total = s[1] + s[2] + s[3];\n          const active = hi === i, dim = hi !== null &amp;&amp; !active;\n          return (\n            \n { setHi(i); setTip({ i, x: e.clientX, y: e.clientY }); }} onMouseMove={(e) =&gt; setTip({ i, x: e.clientX, y: e.clientY })} onMouseLeave={() =&gt; { setHi(null); setTip(null); }}\n              style={{ flex: 1, display: \"flex\", flexDirection: \"column\", alignItems: \"center\", gap: 8, height: \"100%\", justifyContent: \"flex-end\", zIndex: 1, cursor: \"pointer\", position: \"relative\" }}&gt;\n              \n\n                \n\n                \n\n\n              \n              {s[0]}\n            \n          );\n        })}\n      \n      \n\n        {STACK_KEYS.map(([label, color], i) =&gt; (\n          {label}\n        ))}\n      \n    \n  );\n}\nconst SEV = [[\"Critical\", 142, 100, SEVC.critical], [\"High\", 98, 70, SEVC.high], [\"Medium\", 76, 54, SEVC.medium], [\"Low\", 45, 32, SEVC.low], [\"Info\", 21, 15, SEVC.info]];\nconst SEV_ASSETS = {\n  Critical: [[\"PC-CURTIS-WILLIAMS\", \"CVE-2024-21412 \u00b7 SmartScreen bypass\"], [\"srv-db-fin-04\", \"CVE-2024-3094 \u00b7 xz-utils backdoor\"], [\"esx-infranginx-5567897\", \"CVE-2023-46604 \u00b7 ActiveMQ RCE\"], [\"WIN-RUTHD\", \"CVE-2024-21413 \u00b7 Outlook RCE\"]],\n  High: [[\"macbook-pro-jdoe\", \"CVE-2024-23222 \u00b7 WebKit type confusion\"], [\"azure-infra9274676\", \"CVE-2024-21401 \u00b7 Entra ID elevation\"], [\"lablb-2918146-beta\", \"CVE-2024-1709 \u00b7 ScreenConnect auth bypass\"]],\n  Medium: [[\"iphone-asmith\", \"CVE-2024-23225 \u00b7 kernel memory\"], [\"sepio-external3026786\", \"CVE-2024-0519 \u00b7 V8 out-of-bounds\"]],\n  Low: [[\"android-pixel-7\", \"CVE-2024-0039 \u00b7 System component\"]],\n  Info: [[\"win-marychasse\", \"Informational \u00b7 TLS 1.0 enabled\"]],\n};\nfunction SeverityDrawer({ sev, close }) {\n  const list = SEV_ASSETS[sev[0]] || [];\n  return createPortal(&lt;&gt;\n    \n\n    \n\n      \n\n        \n        \n\n          \n{sev[0]} severity\n          \n{sev[1]} open vulnerabilities \u00b7 {list.length} assets shown\n        \n        \n      \n      \n\n        {list.map(([host, cve], i) =&gt; (\n          \n\n            \n\n              {host}\n              {sev[0]}\n            \n            {cve}\n          \n        ))}\n      \n      \n\n        View all {sev[1]} in Inventory\n      \n    \n  , document.body);\n}\nfunction SeverityBody() {\n  const [hi, setHi] = useState(null);\n  const [drill, setDrill] = useState(null);\n  const [tip, setTip] = useState(null);\n  const sevTotal = SEV.reduce((a, b) =&gt; a + b[1], 0);\n  return (&lt;&gt;\n    \n\n      {SEV.map((b, i) =&gt; {\n        const active = hi === i, dim = hi !== null &amp;&amp; !active;\n        return (\n          \n setDrill(b)} onMouseEnter={(e) =&gt; { setHi(i); setTip({ i, x: e.clientX, y: e.clientY }); }} onMouseMove={(e) =&gt; setTip({ i, x: e.clientX, y: e.clientY })} onMouseLeave={() =&gt; { setHi(null); setTip(null); }}\n            style={{ display: \"flex\", alignItems: \"center\", gap: 12, opacity: dim ? 0.5 : 1, transition: \"opacity .15s\", cursor: \"pointer\" }}&gt;\n            {b[0]}\n            \n\n\n            {active ? b[1] + \" open\" : b[1]}\n          \n        );\n      })}\n    \n    {tip &amp;&amp; \n{SEV[tip.i][0]}\n{fmt(SEV[tip.i][1])}\n{Math.round(SEV[tip.i][1] / sevTotal * 100)}% of open findings}\n    {drill &amp;&amp;  setDrill(null)} /&gt;}\n  );\n}\nconst ST_COLOR = { ok: T.viz.green, warn: T.viz.amber, err: T.red };\n\n/* ===== System Lifecycle (discovery cycle) ===== */\nconst LIFECYCLE = [\n  { name: \"Fetch\", pct: 100 }, { name: \"Clean\", pct: 100 }, { name: \"Correlate\", pct: 100 },\n  { name: \"Enrich\", pct: 78 }, { name: \"Calculate\", pct: 0 },\n];\nfunction LifecycleBody() {\n  const [tip, setTip] = useState(null);\n  const done = LIFECYCLE.filter(s =&gt; s.pct === 100).length, total = LIFECYCLE.length;\n  const overall = Math.round(LIFECYCLE.reduce((a, s) =&gt; a + s.pct, 0) / total);\n  const r = 42, sw = 11, C = 2 * Math.PI * r, dash = (overall / 100) * C;\n  return (\n    \n\n      {tip &amp;&amp; \n{LIFECYCLE[tip.i].name} stage\n{LIFECYCLE[tip.i].pct &gt; 0 ? LIFECYCLE[tip.i].pct + \"% complete\" : \"Not started\"}}\n      \n\n        \n\n          \n            \n            \n          \n          \n\n            {done}/{total}\n            Stages\n          \n        \n        \n\n          {LIFECYCLE.map((s, i) =&gt; {\n            const c = s.pct === 100 ? T.viz.green : s.pct &gt; 0 ? T.blue : T.bg40;\n            return (\n              \n setTip({ i, x: e.clientX, y: e.clientY })} onMouseMove={(e) =&gt; setTip({ i, x: e.clientX, y: e.clientY })} onMouseLeave={() =&gt; setTip(null)} style={{ display: \"flex\", alignItems: \"center\", gap: 10, cursor: \"default\" }}&gt;\n                {s.name}\n                \n\n                  \n\n                \n                 0 ? T.blue : T.bg40, ...tnum }}&gt;{s.pct &gt; 0 ? s.pct + \"%\" : \"\u2014\"}\n              \n            );\n          })}\n        \n      \n      \n\n        {[[\"Cycle started\", \"09:00:04\"], [\"Duration\", \"00:42:18\"], [\"Next cycle\", \"13:17:42\"]].map(([k, v], i) =&gt; (\n          \n\n            \n{k}\n            \n{v}\n          \n        ))}\n      \n    \n  );\n}\n\n/* ===== Discovery Log ===== */\nconst DISC_PHASES = [[\"Fetch\", T.viz.green], [\"Clean\", T.viz.mint], [\"Correlate\", T.viz.lilac], [\"Enrich\", T.viz.lilacPale], [\"Calculate\", T.viz.amber], [\"Save\", T.viz.orange]];\nconst DISCOVERY = [\n  { started: \"Jun 15, 09:00\", completed: \"Jun 15, 09:35\", duration: \"35min 22sec\", ph: [40, 12, 18, 10, 12, 8] },\n  { started: \"Jun 14, 09:00\", completed: \"Jun 14, 09:35\", duration: \"35min 59sec\", ph: [38, 14, 17, 11, 12, 8] },\n  { started: \"Jun 13, 09:00\", completed: \"Jun 13, 09:35\", duration: \"35min 29sec\", ph: [41, 11, 18, 10, 12, 8] },\n  { started: \"Jun 12, 09:00\", completed: \"Jun 12, 09:35\", duration: \"35min 11sec\", ph: [39, 13, 17, 11, 12, 8] },\n  { started: \"Jun 11, 09:00\", completed: \"Jun 11, 09:35\", duration: \"35min 58sec\", ph: [44, 12, 16, 9, 11, 8] },\n  { started: \"Jun 10, 09:00\", completed: \"Jun 10, 09:30\", duration: \"30min 54sec\", ph: [36, 12, 18, 12, 14, 8] },\n  { started: \"Jun 9, 09:00\", completed: \"Jun 9, 09:34\", duration: \"34min 02sec\", ph: [37, 13, 17, 11, 13, 9] },\n  { started: \"Jun 8, 09:00\", completed: \"Jun 8, 09:31\", duration: \"31min 38sec\", ph: [40, 12, 17, 10, 13, 8] },\n];\nfunction DiscoveryBody() {\n  const [hi, setHi] = useState(null);\n  const [tip, setTip] = useState(null);\n  const cols = \"minmax(70px, 1.6fr) 104px 92px\";\n  const durToSec = (s) =&gt; { let t = 0; const m = s.match(/(\\d+)\\s*min/), sec = s.match(/(\\d+)\\s*sec/); if (m) t += +m[1] * 60; if (sec) t += +sec[1]; return t; };\n  const fmtDur = (x) =&gt; { x = Math.round(x); const m = Math.floor(x / 60), s = x % 60; return m &gt; 0 ? `${m}min ${s}sec` : `${s}sec`; };\n  return (\n    \n\n      \n\n        {[\"Latest Discoveries\", \"Started\", \"Duration\"].map((c, i) =&gt; (\n          {c}\n        ))}\n      \n      \n\n        {DISCOVERY.map((d, i) =&gt; (\n          \n setHi(i)} onMouseLeave={() =&gt; { setHi(null); setTip(null); }}\n            style={{ display: \"grid\", gridTemplateColumns: cols, gap: 12, alignItems: \"center\", padding: \"7px 6px\", borderBottom: i &lt; DISCOVERY.length - 1 ? `1px solid ${T.hair}` : \"none\", background: hi === i ? T.canvas : \"transparent\", borderRadius: 6, transition: \"background .12s\" }}&gt;\n            \n\n              {d.ph.map((w, j) =&gt;  setTip({ d, j, x: e.clientX, y: e.clientY })} onMouseMove={(e) =&gt; setTip({ d, j, x: e.clientX, y: e.clientY })}\n                style={{ width: `${w}%`, height: \"100%\", background: DISC_PHASES[j][1], cursor: \"pointer\" }} /&gt;)}\n            \n            {d.started}\n            {d.duration}\n          \n        ))}\n      \n      {tip &amp;&amp; \n        \n{DISC_PHASES[tip.j][0]}\n        \n{fmtDur(durToSec(tip.d.duration) * tip.d.ph[tip.j] / 100)}\n        \n{tip.d.ph[tip.j]}% of cycle\n      }\n    \n  );\n}\n\n/* ===== Adapter Connections (status + logo coin + preview) ===== */\nconst ADAPTER_CONN = [\n  { brand: \"crowdstrike\", name: \"CrowdStrike\", st: \"ok\", desc: \"9,120 devices \u00b7 synced 4m ago\" },\n  { brand: \"aws\", name: \"Amazon Web Services\", st: \"ok\", desc: \"12,400 assets \u00b7 synced 6m ago\" },\n  { brand: \"azure\", name: \"Microsoft Azure\", st: \"ok\", desc: \"22,097 assets \u00b7 synced 5m ago\" },\n  { brand: \"okta\", name: \"Okta\", st: \"ok\", desc: \"9,870 users \u00b7 synced 8m ago\" },\n  { short: \"Jm\", color: \"#3B3B3B\", name: \"Jamf Pro\", st: \"err\", desc: \"Connection timeout \u2014 check credentials\" },\n  { short: \"now\", color: \"#2E8B57\", name: \"ServiceNow\", st: \"warn\", desc: \"Rate limited \u00b7 retrying\" },\n  { brand: \"googlecloud\", name: \"Google Cloud\", st: \"ok\", desc: \"9,055 assets \u00b7 synced 7m ago\" },\n  { brand: \"vmware\", name: \"VMware vCenter\", st: \"ok\", desc: \"4,310 VMs \u00b7 synced 11m ago\" },\n];\nconst ST_LABEL = { ok: \"Connected\", warn: \"Degraded\", err: \"Error\" };\nfunction AdapterCoin({ a }) {\n  if (a.brand) return ;\n  return {a.short};\n}\nfunction AdaptersBody() {\n  const connected = ADAPTER_CONN.filter(a =&gt; a.st === \"ok\").length;\n  const attention = ADAPTER_CONN.length - connected;\n  return (\n    \n\n      \n\n        {connected}\n        connected sources\n        {attention &gt; 0 &amp;&amp; {attention} need attention}\n      \n      \n\n        {ADAPTER_CONN.map((a, i) =&gt; {\n          const ring = ST_COLOR[a.st];\n          return (\n            \n\n              \n              \n\n                \n{a.name}\n                \n\n                  \n                  {a.desc}\n                \n              \n            \n          );\n        })}\n      \n    \n  );\n}\nconst HEALTH_OK_BRANDS = [\"crowdstrike\", \"aws\", \"azure\", \"okta\", \"googlecloud\", \"vmware\"];\nfunction HealthOkBody() {\n  return (\n    \n\n      \n\n        33\n        adapters syncing successfully\n      \n      \n\n        {HEALTH_OK_BRANDS.map((b, i) =&gt; )}\n        +27\n      \n      \n\n         100% healthy \u00b7 last full sync 4m ago\n      \n    \n  );\n}\nconst HEALTH_FAIL = [\n  { short: \"Jm\", color: \"#3B3B3B\", name: \"Jamf Pro\", reason: \"Connection timeout \u2014 check credentials\" },\n  { short: \"now\", color: \"#2E8B57\", name: \"ServiceNow\", reason: \"Rate limited \u00b7 retrying\" },\n];\nfunction HealthFailBody() {\n  return (\n    \n\n      \n\n        {HEALTH_FAIL.length}\n        adapters need attention\n      \n      \n\n        {HEALTH_FAIL.map((a, i) =&gt; (\n          \n\n            {a.short}\n            \n\n              \n{a.name}\n              \n{a.reason}\n            \n            Fix\n          \n        ))}\n      \n    \n  );\n}\n/* ===== Cost Optimization dashboard ===== */\nconst fmtMoney = (n) =&gt; n.toLocaleString(\"en-US\");\nfunction CostKPI({ value, unit }) {\n  return (\n    \n\n      {value}\n      {unit &amp;&amp; {unit}}\n    \n  );\n}\nfunction HBarList({ rows, accent, prefix, avatar, appLogo }) {\n  const max = Math.max(...rows.map(r =&gt; r[1]), 1);\n  const totalVal = rows.reduce((a, r) =&gt; a + r[1], 0) || 1;\n  const [tip, setTip] = useState(null);\n  return (\n    \n\n      {rows.map(([label, val], i) =&gt; {\n        const pct = Math.max(4, (val / max) * 100), inside = pct &gt; 24;\n        return (\n          \n setTip({ i, x: e.clientX, y: e.clientY })} onMouseMove={(e) =&gt; setTip({ i, x: e.clientX, y: e.clientY })} onMouseLeave={() =&gt; setTip(null)}\n            style={{ display: \"flex\", alignItems: \"center\", gap: 12, cursor: \"default\" }}&gt;\n            {avatar &amp;&amp; }{appLogo &amp;&amp; }{label}\n            \n\n              \n\n                {inside &amp;&amp; {prefix || \"\"}{fmtMoney(val)}}\n              \n              {!inside &amp;&amp; {prefix || \"\"}{fmtMoney(val)}}\n            \n          \n        );\n      })}\n      {tip &amp;&amp; \n        \n{rows[tip.i][0]}\n        \n{prefix || \"\"}{fmtMoney(rows[tip.i][1])}\n        \n{(rows[tip.i][1] / totalVal * 100).toFixed(1)}% of shown total\n      }\n    \n  );\n}\nconst COST_CATEGORY = [[\"Productivity\", 141993], [\"Video Conference\", 55928], [\"File Sharing\", 52943], [\"Authentication\", 11440], [\"CRM\", 9870]];\nconst COST_APP = [[\"Zoom\", 55928], [\"Miro\", 52885], [\"Dropbox\", 50431], [\"Salesforce\", 43176], [\"Slack\", 38420]];\nconst COST_TOPLIC = [[\"Zoom One Pro\", 70800], [\"Google WS Ent. Starter\", 27450], [\"Google WS Ent. Standard\", 12985], [\"Google WS Business\", 8640], [\"Microsoft 365 G3 GCC\", 1930]];\nconst COST_USAGE = [[\"aaron.church@demo.local\", 29], [\"aaron.daniels@demo.local\", 29], [\"ada.pires@demo.local\", 29], [\"adelaide.gercak@demo.local\", 29], [\"adrian.williams@demo.local\", 29]];\nconst COST_RENEWALS = [\n  { app: \"Office365\", name: \"Microsoft 365 E5\", date: \"2026-07-06\", cost: \"3,175.50\", term: \"Yearly\", unit: \"54.75\" },\n  { app: \"Office365\", name: \"Microsoft Power Aut\u2026\", date: \"2026-08-07\", cost: \"6,518.75\", term: \"Yearly\", unit: \"37.25\" },\n];\nfunction CostExpAllBody() { return ; }\nfunction CostLicAllBody() { return ; }\nfunction CostExp2024Body() { return ; }\nfunction CostLicTotalBody() { return ; }\nfunction CostCategoryBody() { return ; }\nfunction CostAppBody() { return ; }\nfunction CostTopLicBody() { return ; }\nfunction CostUsageBody() { return ; }\nfunction CostRenewalsBody() {\n  const cols = [\n    { label: \"Application\", render: r =&gt; {r.app} },\n    { label: \"Name\", render: r =&gt; {r.name} },\n    { label: \"Renewal Date\", render: r =&gt; {r.date} },\n    { label: \"Total Cost\", align: \"right\", render: r =&gt; ${r.cost} },\n    { label: \"Term\", render: r =&gt; {r.term} },\n    { label: \"Unit\", align: \"right\", render: r =&gt; ${r.unit} },\n  ];\n  return (\n    \n\n      \n\n        \n          \n            {cols.map((c, i) =&gt; {c.label})}\n          \n        \n        \n          {COST_RENEWALS.map((r, ri) =&gt; (\n            \n              {cols.map((c, i) =&gt; {c.render(r)})}\n            \n          ))}\n        \n      \n    \n  );\n}\nfunction ResetViewBtn({ disabled, onReset }) {\n  const [h, setH] = useState(false);\n  return (\n     setH(true)} onMouseLeave={() =&gt; setH(false)}\n      title={disabled ? \"Layout is at its default\" : \"Restore the default tile layout\"}\n      style={{ display: \"inline-flex\", alignItems: \"center\", gap: 6, height: 30, padding: \"0 13px\", borderRadius: 999, fontFamily: T.font, fontSize: 13, fontWeight: 600, cursor: disabled ? \"default\" : \"pointer\", border: `1px solid ${disabled ? T.lineSoft : h ? T.lineStrong : T.line}`, background: disabled ? \"transparent\" : h ? T.surface2 : T.control, color: disabled ? T.faint : T.body, transition: \"all .14s\" }}&gt;\n       Reset view\n    \n  );\n}\n\nconst TILE_META = {\n  line: { eyebrow: \"Activity\", title: \"Device Discovery Over Time\", Body: LineBody },\n  donut: { eyebrow: \"Composition\", title: \"Windows Distribution\", Body: DonutBody },\n  lifecycle: { eyebrow: \"Pipeline\", title: \"System Lifecycle\", Body: LifecycleBody },\n  discovery: { eyebrow: \"Activity\", title: \"Discovery Log\", Body: DiscoveryBody },\n  adapters: { eyebrow: \"Connections\", title: \"Adapter Connections\", Body: AdaptersBody },\n  stacked: { eyebrow: \"Trend\", title: \"Asset Growth by Category\", Body: StackedBody, footer: 12.4% },\n  severity: { eyebrow: \"Risk\", title: \"Vulnerabilities by Severity\", Body: SeverityBody, footer: 18 resolved },\n  healthOk: { eyebrow: \"Adapters\", title: \"Adapter Health \u00b7 Successful\", Body: HealthOkBody },\n  healthFail: { eyebrow: \"Adapters\", title: \"Adapter Health \u00b7 Attention\", Body: HealthFailBody },\n  costExpAll: { eyebrow: \"Spend\", title: \"Total Expenses (All Time)\", Body: CostExpAllBody },\n  costExp2024: { eyebrow: \"Spend\", title: \"Total Expenses (2024)\", Body: CostExp2024Body },\n  costLicAll: { eyebrow: \"Licenses\", title: \"Total License Cost (All Time)\", Body: CostLicAllBody },\n  costLicTotal: { eyebrow: \"Licenses\", title: \"Total License Cost\", Body: CostLicTotalBody },\n  costRenewals: { eyebrow: \"Renewals\", title: \"Upcoming Renewals (next 90 days)\", Body: CostRenewalsBody, footer: View all results, noPad: true },\n  costCategory: { eyebrow: \"Spend\", title: \"Expenses by Category (2024)\", Body: CostCategoryBody },\n  costApp: { eyebrow: \"Spend\", title: \"Expenses by App (2024)\", Body: CostAppBody },\n  costTopLic: { eyebrow: \"Licenses\", title: \"Most Expensive Licenses (2024)\", Body: CostTopLicBody },\n  costUsage: { eyebrow: \"Usage\", title: \"Azure AD Logons \u00b7 last 30 days\", Body: CostUsageBody },\n};\n\n/* ============ resizable grid (corner drag, neighbors reflow) ============ */\nconst GRID_COLS = 12, ROW_UNIT = 40, GAP = 16;\nconst INITIAL_TILES = [\n  { id: \"line\", w: 8, h: 7 }, { id: \"donut\", w: 4, h: 7 },\n  { id: \"lifecycle\", w: 5, h: 7 }, { id: \"discovery\", w: 7, h: 7 },\n  { id: \"adapters\", w: 7, h: 6 }, { id: \"severity\", w: 5, h: 6 },\n  { id: \"healthOk\", w: 6, h: 5 }, { id: \"healthFail\", w: 6, h: 5 },\n  { id: \"stacked\", w: 12, h: 5 },\n];\nconst COST_TILES = [\n  { id: \"costExpAll\", w: 3, h: 4 }, { id: \"costExp2024\", w: 3, h: 4 }, { id: \"costLicAll\", w: 3, h: 4 }, { id: \"costLicTotal\", w: 3, h: 4 },\n  { id: \"costRenewals\", w: 12, h: 6 },\n  { id: \"costCategory\", w: 6, h: 6 }, { id: \"costApp\", w: 6, h: 6 },\n  { id: \"costTopLic\", w: 6, h: 6 }, { id: \"costUsage\", w: 6, h: 6 },\n];\nconst DASH_TILESETS = { \"Cost Optimization\": COST_TILES };\nfunction DashboardGrid({ tileSet = INITIAL_TILES }) {\n  const [tiles, setTiles] = useState(tileSet);\n  const [hoverId, setHoverId] = useState(null);\n  const [resizingId, setResizingId] = useState(null);\n  const [drag, setDrag] = useState(null);\n  const dragId = drag ? drag.id : null;\n  const ref = useRef(null);\n  const tileEls = useRef({});\n  const justDragged = useRef(false);\n\n  const startDrag = (e, id, immediate) =&gt; {\n    if (e.button || (e.target.closest &amp;&amp; (e.target.closest(\"[data-resize]\") || e.target.closest(\"button\")))) return;\n    const startX = e.clientX, startY = e.clientY;\n    let dragging = false;\n    const begin = (cx, cy) =&gt; {\n      const el = tileEls.current[id]; if (!el) return;\n      const rect = el.getBoundingClientRect();\n      dragging = true;\n      setDrag({ id, x: cx, y: cy, ox: cx - rect.left, oy: cy - rect.top, w: rect.width, h: rect.height });\n      document.body.style.userSelect = \"none\";\n    };\n    const timer = immediate ? null : setTimeout(() =&gt; begin(startX, startY), 300);\n    const onMove = (ev) =&gt; {\n      if (!dragging) {\n        const moved = Math.abs(ev.clientX - startX) &gt; (immediate ? 4 : 8) || Math.abs(ev.clientY - startY) &gt; (immediate ? 4 : 8);\n        if (!moved) return;\n        if (immediate) begin(ev.clientX, ev.clientY); else { end(); return; }\n        if (!dragging) return;\n      }\n      setDrag(d =&gt; d ? { ...d, x: ev.clientX, y: ev.clientY } : d);\n      for (const tid in tileEls.current) {\n        const el = tileEls.current[tid];\n        if (!el || tid === id) continue;\n        const r = el.getBoundingClientRect();\n        if (ev.clientX &gt;= r.left &amp;&amp; ev.clientX &lt;= r.right &amp;&amp; ev.clientY &gt;= r.top &amp;&amp; ev.clientY &lt;= r.bottom) {\n          setTiles(ts =&gt; { const from = ts.findIndex(x =&gt; x.id === id), to = ts.findIndex(x =&gt; x.id === tid); if (from &lt; 0 || to &lt; 0 || from === to) return ts; const n = ts.slice(); const [mv] = n.splice(from, 1); n.splice(to, 0, mv); return n; });\n          break;\n        }\n      }\n    };\n    const end = () =&gt; { clearTimeout(timer); if (dragging) { justDragged.current = true; setTimeout(() =&gt; { justDragged.current = false; }, 60); } dragging = false; setDrag(null); document.body.style.userSelect = \"\"; window.removeEventListener(\"pointermove\", onMove); window.removeEventListener(\"pointerup\", end); };\n    window.addEventListener(\"pointermove\", onMove); window.addEventListener(\"pointerup\", end);\n  };\n\n  const startResize = (e, id) =&gt; {\n    e.preventDefault(); e.stopPropagation();\n    setResizingId(id);\n    const rect = ref.current.getBoundingClientRect();\n    const colW = (rect.width - GAP * (GRID_COLS - 1)) / GRID_COLS;\n    const t = tiles.find(x =&gt; x.id === id);\n    const startWpx = t.w * colW + (t.w - 1) * GAP;\n    const startHpx = t.h * ROW_UNIT + (t.h - 1) * GAP;\n    const sx = e.clientX, sy = e.clientY;\n    const onMove = (ev) =&gt; {\n      let w = Math.round((startWpx + (ev.clientX - sx) + GAP) / (colW + GAP));\n      let h = Math.round((startHpx + (ev.clientY - sy) + GAP) / (ROW_UNIT + GAP));\n      w = Math.max(3, Math.min(GRID_COLS, w));\n      h = Math.max(4, Math.min(14, h));\n      setTiles(ts =&gt; ts.map(x =&gt; x.id === id ? { ...x, w, h } : x));\n    };\n    const onUp = () =&gt; { setResizingId(null); document.body.style.cursor = \"\"; window.removeEventListener(\"mousemove\", onMove); window.removeEventListener(\"mouseup\", onUp); };\n    document.body.style.cursor = \"nwse-resize\";\n    window.addEventListener(\"mousemove\", onMove); window.addEventListener(\"mouseup\", onUp);\n  };\n\n  const isDefault = JSON.stringify(tiles) === JSON.stringify(tileSet);\n  return (\n    &lt;&gt;\n      \n\n         setTiles(tileSet)} /&gt;\n      \n    \n\n      {tiles.map((t, ti) =&gt; {\n        const m = TILE_META[t.id];\n        const isHover = hoverId === t.id, isResizing = resizingId === t.id, isDragging = dragId === t.id, anyDrag = dragId !== null;\n        return (\n          \n (tileEls.current[t.id] = el)}\n            onPointerDown={(e) =&gt; startDrag(e, t.id)}\n            onClickCapture={(e) =&gt; { if (justDragged.current) { e.stopPropagation(); justDragged.current = false; } }}\n            onMouseEnter={() =&gt; setHoverId(t.id)} onMouseLeave={() =&gt; setHoverId(null)}\n            style={{ gridColumn: `span ${t.w}`, gridRow: `span ${t.h}`, position: \"relative\", minWidth: 0, zIndex: 1 }}&gt;\n            {isDragging ? (\n              \n\n            ) : (&lt;&gt;\n            \n\n              \n { e.stopPropagation(); startDrag(e, t.id, true); }} title=\"Drag to move\" style={{ padding: \"13px 20px 12px\", borderBottom: `1px solid ${T.hair}`, display: \"flex\", alignItems: \"center\", gap: 8, cursor: \"grab\" }}&gt;\n                \n\n                  \n{m.eyebrow}\n                  \n{m.title}\n                \n                \n              \n              \n\n              {m.footer &amp;&amp; \n{m.footer}}\n            \n            \n startResize(e, t.id)} data-resize title=\"Drag to resize\"\n              style={{ position: \"absolute\", right: 0, bottom: 0, width: 20, height: 20, cursor: \"nwse-resize\", display: \"flex\", alignItems: \"flex-end\", justifyContent: \"flex-end\", padding: 4, opacity: isHover || isResizing ? 1 : 0, transition: \"opacity .15s\" }}&gt;\n              \n            \n            )}\n          \n        );\n      })}\n    \n    {drag &amp;&amp; (() =&gt; { const m = TILE_META[drag.id]; return createPortal(\n      \n\n        \n\n          \n\n            \n\n              \n{m.eyebrow}\n              \n{m.title}\n            \n            \n          \n          \nDrop to reorder\n        \n      , document.body); })()}\n    \n  );\n}\n\n/* ============ Assets table view (real device schema) ============ */\nconst ADAPTERS = {\n  aws_adapter: { brand: \"aws\" }, active_directory_adapter: { brand: \"active_directory\" },\n  crowd_strike_adapter: { brand: \"crowdstrike\" }, google_mdm_adapter: { brand: \"googlecloud\" },\n  esx_adapter: { brand: \"vmware\" }, sentinelone_adapter: { brand: \"sentinelone\" },\n  service_now_adapter: { brand: \"service_now\" }, epo_adapter: { brand: \"epo\" },\n  paloalto_panorama_adapter: { brand: \"paloalto\" }, cisco_meraki_adapter: { brand: \"cisco_meraki\" },\n  cisco_ise_adapter: { brand: \"cisco_ise\" }, cisco_adapter: { brand: \"cisco\" },\n  tanium_adapter: { brand: \"tanium\" }, tanium_asset_adapter: { brand: \"tanium\" },\n  claroty_adapter: { brand: \"claroty\" }, counter_act_adapter: { brand: \"forescout\" },\n  tenable_security_center_adapter: { brand: \"tenable\" }, zoom_adapter: { brand: \"zoom\" },\n  checkpoint_r80_adapter: { brand: \"checkpoint\" }, cylance_adapter: { brand: \"cylance\" },\n  chef_adapter: { brand: \"chef\" }, axonius_network_inspector_adapter: { short: \"NP\", color: \"#1C1D1F\" },\n};\nfunction AdapterAvatar({ k, size = 32 }) {\n  const a = ADAPTERS[k] || { short: k.slice(0, 2).toUpperCase(), color: \"#939598\" };\n  if (a.brand) return ;\n  return \n 28 ? 11 : 9, fontWeight: 700, color: a.color }}&gt;{a.short};\n}\nfunction AdapterStack({ list }) {\n  const shown = list.slice(0, 3), extra = list.length - shown.length;\n  return (\n    \n      \n      {shown.map((k, i) =&gt; )}\n      {extra &gt; 0 &amp;&amp; +{extra}}\n    \n  );\n}\n/* OS category icons */\nfunction OsIcon({ os }) {\n  const c = { Windows: \"#0078D4\", Linux: \"#1C1D1F\", \"OS X\": \"#555\", iOS: \"#111\", Android: \"#3DDC84\", VMWare: \"#607078\" }[os] || T.faint;\n  const mc = T.isLight ? \"#1B2030\" : \"#D6DAE6\"; // monochrome marks adapt to theme\n  const g = {\n    Windows: ,\n    \"OS X\": ,\n    iOS: ,\n    Android: ,\n    Linux: ,\n    VMWare: vm,\n  }[os];\n  if (!os) return \u2014;\n  return {g || }{os};\n}\nconst DEVICES = [\n  { name: \"PC-CURTIS-WILLIAMS\", host: \"PC-CURTIS-WILLIAMS.demo.local\", os: \"Windows\", ip: \"10.0.49.148\", mac: \"88:53:2E:12:45:C4\", seen: \"2026-06-08 09:34\", tags: [\"Corporate\", \"Managed\"], adapters: [\"active_directory_adapter\", \"crowd_strike_adapter\", \"epo_adapter\", \"google_mdm_adapter\", \"tanium_adapter\", \"sentinelone_adapter\", \"cisco_ise_adapter\"] },\n  { name: \"infranginx-5567897-stg\", host: \"esx-infranginx-5567897-stg.demo.local\", os: \"Linux\", ip: \"10.0.63.107\", mac: \"00:0C:29:12:55:38\", seen: \"2026-06-08 11:43\", tags: [\"Staging\", \"Cloud\"], adapters: [\"cisco_ise_adapter\", \"claroty_adapter\", \"counter_act_adapter\", \"epo_adapter\", \"tanium_adapter\", \"esx_adapter\", \"aws_adapter\"] },\n  { name: \"WIN-RUTHD\", host: \"WIN-RUTHD.demo.local\", os: \"Windows\", ip: \"10.0.48.107\", mac: \"88:53:2E:12:44:9B\", seen: \"2026-06-08 13:18\", tags: [\"Corporate\"], adapters: [\"active_directory_adapter\", \"cisco_adapter\", \"crowd_strike_adapter\", \"cylance_adapter\", \"epo_adapter\", \"tanium_adapter\"] },\n  { name: \"external3026786-prd\", host: \"sepio-external3026786-prd.demo.local\", os: \"Linux\", ip: \"10.0.64.36\", mac: \"88:53:2E:12:56:12\", seen: \"2026-06-08 05:54\", tags: [\"Production\", \"Internet-facing\"], adapters: [\"checkpoint_r80_adapter\", \"chef_adapter\", \"epo_adapter\", \"paloalto_panorama_adapter\", \"axonius_network_inspector_adapter\", \"claroty_adapter\", \"tenable_security_center_adapter\"] },\n  { name: \"macbook-pro-jdoe\", host: \"macbook-pro-jdoe.demo.local\", os: \"OS X\", ip: \"10.0.51.22\", mac: \"A4:83:E7:9C:11:04\", seen: \"2026-06-08 12:02\", tags: [\"Endpoint\", \"BYOD\"], adapters: [\"google_mdm_adapter\", \"crowd_strike_adapter\", \"sentinelone_adapter\"] },\n  { name: \"lablb-2918146-beta\", host: \"esx-lablb-2918146-beta.manufacturing.com\", os: \"Linux\", ip: \"10.0.56.90\", mac: \"00:0C:29:12:4C:BF\", seen: \"2026-06-08 11:30\", tags: [\"Lab\"], adapters: [\"cisco_meraki_adapter\", \"claroty_adapter\", \"epo_adapter\", \"esx_adapter\", \"tanium_asset_adapter\", \"counter_act_adapter\", \"service_now_adapter\"] },\n  { name: \"iphone-asmith\", host: \"\u2014\", os: \"iOS\", ip: \"10.0.77.51\", mac: \"F0:18:98:22:7D:AA\", seen: \"2026-06-08 11:58\", tags: [\"Mobile\", \"BYOD\"], adapters: [\"google_mdm_adapter\", \"zoom_adapter\"] },\n  { name: \"srv-db-fin-04\", host: \"srv-db-fin-04.healthcare-subsidiary.com\", os: \"Linux\", ip: \"10.0.40.12\", mac: \"00:50:56:9A:3C:11\", seen: \"2026-06-08 07:12\", tags: [\"Production\", \"Database\", \"PCI\"], adapters: [\"service_now_adapter\", \"tenable_security_center_adapter\", \"tanium_adapter\", \"epo_adapter\", \"aws_adapter\", \"claroty_adapter\"] },\n  { name: \"azure-infra9274676-prd\", host: \"azure-infra9274676-prd.demo.local\", os: \"Windows\", ip: \"10.0.61.5\", mac: \"00:0D:3A:1F:8E:22\", seen: \"2026-06-08 10:47\", tags: [\"Production\", \"Cloud\"], adapters: [\"active_directory_adapter\", \"aws_adapter\", \"sentinelone_adapter\", \"service_now_adapter\"] },\n  { name: \"android-pixel-7\", host: \"\u2014\", os: \"Android\", ip: \"10.0.78.130\", mac: \"3C:28:6D:55:01:9F\", seen: \"2026-06-08 09:05\", tags: [\"Mobile\"], adapters: [\"google_mdm_adapter\"] },\n  { name: \"Win-MaryChasse\", host: \"WIN-MARYCHASSE.demo.local\", os: \"Windows\", ip: \"10.0.49.201\", mac: \"88:53:2E:12:48:7E\", seen: \"2026-06-07 22:41\", tags: [\"Corporate\"], adapters: [\"active_directory_adapter\", \"epo_adapter\", \"cisco_meraki_adapter\"] },\n  { name: \"esx-mail-2231-prd\", host: \"esx-mail-2231-prd.manufacturing.com\", os: \"VMWare\", ip: \"10.0.62.18\", mac: \"00:0C:29:44:1A:E0\", seen: \"2026-06-08 06:33\", tags: [\"Production\"], adapters: [\"esx_adapter\", \"tenable_security_center_adapter\", \"paloalto_panorama_adapter\"] },\n  { name: \"PC-Doris9920\", host: \"PC-DORIS9920.demo.local\", os: \"Windows\", ip: \"10.0.50.66\", mac: \"88:53:2E:12:51:C9\", seen: \"2026-06-08 08:59\", tags: [\"Corporate\", \"Managed\"], adapters: [\"active_directory_adapter\", \"crowd_strike_adapter\", \"tanium_adapter\", \"google_mdm_adapter\"] },\n  { name: \"kiosk-lobby-03\", host: \"kiosk-lobby-03.demo.local\", os: \"Linux\", ip: \"10.0.44.7\", mac: \"B8:27:EB:0C:5A:31\", seen: \"2026-06-07 19:20\", tags: [\"IoT\", \"Unmanaged\"], adapters: [\"counter_act_adapter\", \"claroty_adapter\"] },\n];\n\nconst INIT_COLS = [\n  { key: \"adapters\", label: \"Adapter Connections\", w: 230, pinned: false },\n  { key: \"name\", label: \"Asset Name\", w: 230, pinned: false },\n  { key: \"host\", label: \"Host Name\", w: 300, pinned: false },\n  { key: \"os\", label: \"OS Type\", w: 140, pinned: false },\n  { key: \"ip\", label: \"IP Address\", w: 140, pinned: false },\n  { key: \"mac\", label: \"MAC Address\", w: 160, pinned: false },\n  { key: \"seen\", label: \"Last Seen (UTC)\", w: 170, pinned: false },\n  { key: \"tags\", label: \"Tags\", w: 220, pinned: false },\n];\nconst CB_W = 46;\nconst mono = { fontFamily: \"ui-monospace, 'SF Mono', monospace\" };\nfunction cellContent(key, r) {\n  switch (key) {\n    case \"adapters\": return ;\n    case \"name\": return {r.name};\n    case \"host\": return {r.host};\n    case \"os\": return ;\n    case \"ip\": return {r.ip};\n    case \"mac\": return {r.mac};\n    case \"seen\": return {r.seen};\n    case \"tags\": return {r.tags.slice(0, 2).map((t, j) =&gt; )}{r.tags.length &gt; 2 &amp;&amp; +{r.tags.length - 2}};\n    default: return null;\n  }\n}\n\nfunction HeaderCell({ col, left, isLastPinned, onResize, onPin, onDragStart, regRef, dragging }) {\n  const [h, setH] = useState(false);\n  const sticky = col.pinned;\n  return (\n    \n regRef(col.key, el)} onPointerDown={(e) =&gt; onDragStart(e, col.key)} onMouseEnter={() =&gt; setH(true)} onMouseLeave={() =&gt; setH(false)}\n      style={{ width: col.w, flexShrink: 0, position: sticky ? \"sticky\" : \"relative\", left: sticky ? left : undefined, zIndex: sticky ? 4 : 1, background: T.canvas, height: 40, display: \"flex\", alignItems: \"center\", gap: 6, padding: \"0 12px\", boxShadow: isLastPinned ? \"2px 0 5px rgba(27,32,70,0.06)\" : \"none\", cursor: \"grab\", opacity: dragging ? 0.4 : 1 }}&gt;\n      {col.label}\n      {(h || col.pinned) &amp;&amp; (\n         onPin(col.key)} title={col.pinned ? \"Unpin column\" : \"Pin column\"}\n          style={{ width: 24, height: 24, borderRadius: 6, border: \"none\", cursor: \"pointer\", background: \"transparent\", color: col.pinned ? T.blue : T.faint, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", transform: col.pinned ? \"none\" : \"rotate(45deg)\", flexShrink: 0 }}&gt;\n          \n        \n      )}\n      \n onResize(e, col.key)} data-colresize title=\"Drag to resize\"\n        style={{ position: \"absolute\", right: -3, top: 8, width: 6, height: 24, cursor: \"col-resize\", display: \"flex\", justifyContent: \"center\", zIndex: 5 }}&gt;\n        \n      \n    \n  );\n}\n\nfunction AssetsTable() {\n  const [columns, setColumns] = useState(INIT_COLS);\n  const [hoverRow, setHoverRow] = useState(null);\n  const [perPage, setPerPage] = useState(20);\n  const [dragCol, setDragCol] = useState(null);\n  const colEls = useRef({});\n  const regRef = (k, el) =&gt; { colEls.current[k] = el; };\n\n  const startColDrag = (e, key) =&gt; {\n    if (e.button || (e.target.closest &amp;&amp; (e.target.closest(\"[data-colresize]\") || e.target.closest(\"button\")))) return;\n    const startX = e.clientX; let dragging = false;\n    const onMove = (ev) =&gt; {\n      if (!dragging) { if (Math.abs(ev.clientX - startX) &gt; 6) { dragging = true; setDragCol(key); document.body.style.userSelect = \"none\"; } else return; }\n      for (const k in colEls.current) {\n        const el = colEls.current[k]; if (!el || k === key) continue;\n        const r = el.getBoundingClientRect();\n        if (ev.clientX &gt;= r.left &amp;&amp; ev.clientX &lt;= r.right) {\n          setColumns(cs =&gt; { const from = cs.findIndex(c =&gt; c.key === key), to = cs.findIndex(c =&gt; c.key === k); if (from &lt; 0 || to &lt; 0 || from === to) return cs; const n = cs.slice(); const [m] = n.splice(from, 1); n.splice(to, 0, m); return n; });\n          break;\n        }\n      }\n    };\n    const onUp = () =&gt; { dragging = false; setDragCol(null); document.body.style.userSelect = \"\"; window.removeEventListener(\"pointermove\", onMove); window.removeEventListener(\"pointerup\", onUp); };\n    window.addEventListener(\"pointermove\", onMove); window.addEventListener(\"pointerup\", onUp);\n  };\n\n  const startColResize = (e, key) =&gt; {\n    e.preventDefault(); e.stopPropagation();\n    const sx = e.clientX, startW = columns.find(c =&gt; c.key === key).w;\n    const onMove = (ev) =&gt; { const w = Math.max(90, startW + (ev.clientX - sx)); setColumns(cs =&gt; cs.map(c =&gt; c.key === key ? { ...c, w } : c)); };\n    const onUp = () =&gt; { document.body.style.cursor = \"\"; window.removeEventListener(\"mousemove\", onMove); window.removeEventListener(\"mouseup\", onUp); };\n    document.body.style.cursor = \"col-resize\";\n    window.addEventListener(\"mousemove\", onMove); window.addEventListener(\"mouseup\", onUp);\n  };\n  const togglePin = (key) =&gt; setColumns(cs =&gt; cs.map(c =&gt; c.key === key ? { ...c, pinned: !c.pinned } : c));\n\n  const pinned = columns.filter(c =&gt; c.pinned), unpinned = columns.filter(c =&gt; !c.pinned);\n  const ordered = [...pinned, ...unpinned];\n  const leftMap = {}; let acc = CB_W;\n  pinned.forEach(c =&gt; { leftMap[c.key] = acc; acc += c.w; });\n  const lastPinned = pinned.length ? pinned[pinned.length - 1].key : null;\n  const totalW = CB_W + columns.reduce((a, c) =&gt; a + c.w, 0);\n\n  return (\n    \n\n      \n\n        \n\n          {/* header */}\n          \n\n            \n\n              \n            \n            {ordered.map(c =&gt; )}\n            \n\n          \n          {/* rows */}\n          {DEVICES.map((r, i) =&gt; {\n            const rowBg = hoverRow === i ? T.surface2 : T.surface;\n            return (\n              \n setHoverRow(i)} onMouseLeave={() =&gt; setHoverRow(null)}\n                style={{ display: \"flex\", height: 52, borderBottom: i &lt; DEVICES.length - 1 ? `1px solid ${T.hair}` : \"none\", background: rowBg }}&gt;\n                \n\n                  {hoverRow === i ?  : {i + 1}}\n                \n                {ordered.map(c =&gt; {\n                  const sticky = c.pinned;\n                  return (\n                    \n\n                      {cellContent(c.key, r)}\n                    \n                  );\n                })}\n                \n\n              \n            );\n          })}\n        \n      \n      {/* footer */}\n      \n\n        \n\n          Results per page:\n          \n\n            {[20, 50, 100].map(n =&gt;  setPerPage(n)} style={{ minWidth: 30, height: 28, borderRadius: 8, border: \"none\", cursor: \"pointer\", fontFamily: T.font, fontSize: 13, fontWeight: 500, ...tnum, background: perPage === n ? T.blue : \"transparent\", color: perPage === n ? T.white : T.body }}&gt;{n})}\n          \n        \n        \n\n          1\u2013{perPage} of 12,409\n          \n\n            \n            1234\n            \u2026621\n            \n          \n        \n      \n    \n  );\n}\n\nfunction QueryPill({ children, primary, active, onClick }) {\n  const [h, setH] = useState(false);\n  return  setH(true)} onMouseLeave={() =&gt; setH(false)} style={{ display: \"inline-flex\", alignItems: \"center\", gap: 6, height: 32, padding: \"0 14px\", borderRadius: 999, cursor: \"pointer\", fontFamily: T.font, fontSize: 13.5, fontWeight: 600, border: primary ? \"none\" : `1px solid ${active || h ? T.lineStrong : T.line}`, background: primary ? T.blue : active || h ? T.surface2 : T.control, color: primary ? T.onAccent : T.body }}&gt;{children};\n}\nfunction ToolLink({ icon: Icon, children }) {\n  const [h, setH] = useState(false);\n  return  setH(true)} onMouseLeave={() =&gt; setH(false)} style={{ display: \"inline-flex\", alignItems: \"center\", gap: 6, height: 30, padding: \"0 10px\", border: \"none\", borderRadius: 999, background: h ? T.surface2 : \"transparent\", color: T.body, fontSize: 13.5, fontWeight: 600, cursor: \"pointer\", fontFamily: T.font }}&gt;{Icon &amp;&amp; }{children};\n}\nfunction SegTool({ icon: Icon, title, first }) {\n  const [h, setH] = useState(false);\n  return (\n     setH(true)} onMouseLeave={() =&gt; setH(false)}&gt;\n      \n      {h &amp;&amp; {title}}\n    \n  );\n}\nfunction IconTool({ icon: Icon, title }) {\n  const [h, setH] = useState(false);\n  return (\n     setH(true)} onMouseLeave={() =&gt; setH(false)}&gt;\n      \n      {h &amp;&amp; {title}}\n    \n  );\n}\nfunction Segmented({ options, value, onChange }) {\n  const idx = Math.max(0, options.indexOf(value));\n  const wpct = 100 / options.length;\n  return (\n    \n\n      \n      {options.map(o =&gt; (\n         onChange(o)} style={{ position: \"relative\", zIndex: 1, minWidth: 62, padding: \"0 12px\", border: \"none\", background: \"transparent\", color: value === o ? T.onAccent : T.body, fontSize: 13.5, fontWeight: value === o ? 600 : 500, cursor: \"pointer\", fontFamily: T.font, transition: \"color .2s\" }}&gt;{o}\n      ))}\n    \n  );\n}\n\nfunction QueriesPanel({ close }) {\n  const recent = [\n    { nm: \"FH: 1.4 Asset Context.Business Importance\", sub: \"Shared Queries\" },\n    { nm: \"low Risk Score_2025-12-24T11-53\", sub: \"Public Queries / Predefined Queries\" },\n    { nm: \"Unmanaged endpoints seen &lt; 7d\", sub: \"Shared Queries\" },\n    { nm: \"Critical CVEs on internet-facing\", sub: \"Public Queries / Predefined Queries\" },\n  ];\n  return createPortal(&lt;&gt;\n    \n\n    \n\n      \n\n        Queries\n        \n        \n        \n      \n      \n\n        \n\n          \n        \n      \n      \n\n        \nFavorites\n        \nRecently Used Saved Queries\n        {recent.map((q, i) =&gt; (\n           (e.currentTarget.style.background = T.surface2)} onMouseLeave={(e) =&gt; (e.currentTarget.style.background = \"transparent\")}\n            style={{ display: \"flex\", alignItems: \"center\", gap: 11, width: \"100%\", border: \"none\", background: \"transparent\", borderRadius: 10, cursor: \"pointer\", padding: \"9px\", textAlign: \"left\", fontFamily: T.font }}&gt;\n            \n            \n              {q.nm}\n              {q.sub}\n            \n          \n        ))}\n      \n    \n  , document.body);\n}\nfunction AssetsView() {\n  const [mode, setMode] = useState(\"Wizard\");\n  const [enrichOpen, setEnrichOpen] = useState(false);\n  const [queriesOpen, setQueriesOpen] = useState(false);\n  return (\n    \n\n      \n\n      {/* breadcrumb + title + module actions */}\n      \n\n        \n\n          \nInventory / Assets\n          \nDevices\n        \n        \n\n          \n\n             setEnrichOpen(o =&gt; !o)}&gt;Enrichment &amp; Investigation \n            {enrichOpen &amp;&amp; (&lt;&gt;\n              \n setEnrichOpen(false)} style={{ position: \"fixed\", inset: 0, zIndex: 40 }} /&gt;\n              \n\n                {[\"Business Data Enrichment\", \"Device Inventory Classification\", \"Asset Investigation\"].map(o =&gt; (\n                   setEnrichOpen(false)} onMouseEnter={(e) =&gt; (e.currentTarget.style.background = T.surface2)} onMouseLeave={(e) =&gt; (e.currentTarget.style.background = \"transparent\")}\n                    style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", gap: 10, width: \"100%\", border: \"none\", background: \"transparent\", borderRadius: 8, cursor: \"pointer\", padding: \"9px 11px\", fontSize: 13, fontWeight: 500, fontFamily: T.font, color: T.body, textAlign: \"left\" }}&gt;\n                    {o} \n                  \n                ))}\n              \n            )}\n          \n          \n        \n      \n      {/* query toolbar */}\n      \n\n        New Query\n        Save As\n        Reset\n        Copy Query\n        \n\n        Display by Date\n        \n\n         setQueriesOpen(o =&gt; !o)}&gt;{queriesOpen ?  : &lt;&gt; Queries}\n        \n      \n      {/* search + wizard / basic filters */}\n      {mode === \"Wizard\" ? (\n        \n\n          \n\n            \n            \n          \n          Query Wizard\n        \n      ) : (\n        \n\n          \n          \n          \nLast Seen\n          \nTags\n           Filter\n        \n      )}\n      {/* stats toolbar */}\n      \n\n        Total 12,409\n         Last updated: 2026-06-08 17:07:59\n        \n\n        \n\n          \n\n            \n            \n            \n          \n           New Asset\n        \n      \n      {/* end flexShrink header */}\n      \n\n        \n      \n      {queriesOpen &amp;&amp;  setQueriesOpen(false)} /&gt;}\n    \n  );\n}\nfunction PageBtn({ children, active, disabled, wide }) {\n  const [h, setH] = useState(false);\n  return  setH(true)} onMouseLeave={() =&gt; setH(false)} style={{ minWidth: wide ? \"auto\" : 30, height: 30, padding: wide ? \"0 10px\" : 0, borderRadius: 999, border: active ? \"none\" : `1px solid ${h &amp;&amp; !disabled ? T.lineStrong : \"transparent\"}`, background: active ? T.blue : h &amp;&amp; !disabled ? T.surface2 : \"transparent\", color: active ? T.onAccent : disabled ? T.faint : T.body, fontSize: 13, fontWeight: 500, cursor: disabled ? \"default\" : \"pointer\", display: \"inline-flex\", alignItems: \"center\", justifyContent: \"center\", fontFamily: T.font, ...tnum }}&gt;{children};\n}\n\n/* ============ Inventory tree panel (assets view) ============ */\nconst INV_GROUPS_INIT = [\n  { name: \"Compute\", icon: Server, open: true, items: [\n    { icon: Server, label: \"Corporate Devices\", count: \"8,204\", fav: true },\n    { icon: ShieldAlert, label: \"Internet-facing Assets\", count: \"312\", fav: true },\n    { folder: \"Endpoint\", open: true, items: [\n      { icon: Server, label: \"Devices\", count: \"12,409\", active: true },\n      { icon: Workflow, label: \"Processes\", count: \"0\" },\n    ]},\n    { folder: \"Infrastructure\", open: false, items: [\n      { icon: Boxes, label: \"Compute Services\", count: \"14\" },\n      { icon: Cable, label: \"Databases\", count: \"36\" },\n      { icon: Boxes, label: \"Containers\", count: \"258\" },\n      { icon: Cable, label: \"Serverless Functions\", count: \"103\" },\n      { icon: Boxes, label: \"Compute Images\", count: \"25\" },\n    ]},\n    { icon: Settings, label: \"Configurations\", count: \"0\" },\n    { icon: Clock, label: \"Latest Devices\", count: \"12,409\" },\n  ] },\n  { name: \"Identity\", icon: Users, open: false, items: [\n    { folder: \"Directory\", open: false, items: [\n      { icon: Users, label: \"Users\", count: \"4,821\" },\n      { icon: Users, label: \"Groups\", count: \"312\" },\n    ]},\n    { icon: ShieldAlert, label: \"Service Accounts\", count: \"87\" },\n  ] },\n  { name: \"Applications\", icon: Layers, open: false, items: [\n    { icon: Layers, label: \"SaaS Apps\", count: \"143\" },\n    { icon: Layers, label: \"Installed Software\", count: \"2,904\" },\n  ] },\n  { name: \"Tickets\", icon: Bell, open: false, items: [\n    { icon: Bell, label: \"Open Tickets\", count: \"48\" },\n    { icon: Bell, label: \"Resolved\", count: \"203\" },\n  ] },\n];\nfunction InventoryPanel({ collapsed, setCollapsed }) {\n  const [groups, setGroups] = useState(INV_GROUPS_INIT);\n  const [favOpen, setFavOpen] = useState(true);\n\n  const collectItems = (items) =&gt; items.flatMap(it =&gt; it.folder ? collectItems(it.items) : [it]);\n  const favItems = groups.flatMap(g =&gt; collectItems(g.items)).filter(it =&gt; it.fav);\n\n  const toggleFavInItems = (items, label) =&gt; items.map(it =&gt;\n    it.folder ? { ...it, items: toggleFavInItems(it.items, label) }\n              : it.label === label ? { ...it, fav: !it.fav } : it\n  );\n  const toggleFav = (label) =&gt; setGroups(gs =&gt; gs.map(g =&gt; ({ ...g, items: toggleFavInItems(g.items, label) })));\n  if (collapsed) {\n    const compute = groups.find(g =&gt; g.name === \"Compute\");\n    return (\n      \n\n         setCollapsed(false)} title=\"Expand inventory\" className=\"ax-edge-collapse\"\n          style={{ position: \"absolute\", top: 16, right: -14, zIndex: 6, width: 28, height: 28, borderRadius: \"50%\", border: `1px solid ${T.line}`, background: T.surface, color: T.muted, cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", boxShadow: T.shadow }}&gt;\n          \n        \n        \n\n          \n        \n        \n\n        {(compute ? compute.items : []).map((it, i) =&gt; {\n          const Icon = it.icon;\n          return (\n            \n\n              \n            \n          );\n        })}\n      \n    );\n  }\n  return (\n    \n\n       setCollapsed(true)} title=\"Collapse panel\" className=\"ax-edge-collapse\"\n        style={{ position: \"absolute\", top: 16, right: -14, zIndex: 6, width: 28, height: 28, borderRadius: \"50%\", border: `1px solid ${T.line}`, background: T.surface, color: T.muted, cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", boxShadow: T.shadow }}&gt;\n        \n      \n      \n\n        \n\n          \n        \n      \n      \n\n        \n\n          \n setFavOpen(o =&gt; !o)} style={{ display: \"flex\", alignItems: \"center\", gap: 9, padding: \"9px 8px\", cursor: \"pointer\", borderRadius: 8, color: T.body }}&gt;\n            \n            \n            Favorites\n            {favItems.length}\n          \n          {favOpen &amp;&amp; favItems.map((it, ii) =&gt; )}\n        \n        {groups.map((g, gi) =&gt; { const Icon = g.icon; return (\n          \n\n            \n setGroups(gs =&gt; gs.map((x, i) =&gt; i === gi ? { ...x, open: !x.open } : x))}\n              style={{ display: \"flex\", alignItems: \"center\", gap: 9, padding: \"9px 8px\", cursor: \"pointer\", borderRadius: 8, color: g.open ? T.accentText : T.body }}&gt;\n              \n              \n              {g.name}\n            \n            {g.open &amp;&amp; g.items.map((it, ii) =&gt; it.folder ?  : )}\n          \n        ); })}\n      \n    \n  );\n}\nfunction InvFolder({ folder, toggleFav }) {\n  const [open, setOpen] = useState(folder.open);\n  const [h, setH] = useState(false);\n  const FIcon = open ? FolderOpen : Folder;\n  return (\n    \n\n      \n setH(true)} onMouseLeave={() =&gt; setH(false)} onClick={() =&gt; setOpen(o =&gt; !o)}\n        style={{ display: \"flex\", alignItems: \"center\", gap: 8, height: 34, padding: \"0 8px 0 22px\", borderRadius: 8, cursor: \"pointer\", background: h ? T.surface2 : \"transparent\", transition: \"background .12s\" }}&gt;\n        \n        \n        {folder.folder}\n      \n      {open &amp;&amp; folder.items.map((it, i) =&gt; )}\n    \n  );\n}\nfunction InvRow({ icon: Icon, label, count, active, fav, indent, toggleFav }) {\n  const [h, setH] = useState(false);\n  const left = indent || 28;\n  return (\n    \n setH(true)} onMouseLeave={() =&gt; setH(false)}\n      style={{ position: \"relative\", display: \"flex\", alignItems: \"center\", gap: 11, height: 36, margin: \"1px 0\", padding: `0 8px 0 ${left}px`, borderRadius: 8, cursor: \"pointer\", background: active ? T.accentSoft : h ? T.surface2 : \"transparent\", transition: \"background .14s\" }}&gt;\n      \n      {label}\n      {(h || fav) &amp;&amp; toggleFav &amp;&amp; (\n         { e.stopPropagation(); toggleFav(label); }} title={fav ? \"Remove from favorites\" : \"Add to favorites\"} className=\"ax-star\"\n          style={{ width: 22, height: 22, borderRadius: 6, border: \"none\", background: \"transparent\", cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", padding: 0, flexShrink: 0 }}&gt;\n          \n        \n      )}\n      {!h &amp;&amp; !fav &amp;&amp; {count}}\n    \n  );\n}\n\n/* ============ chrome ============ */\nfunction AppHeader({ theme, setTheme }) {\n  return (\n    \n\n      \n\n        \n      \n      \n\n        \n\n          Search Axonius\n          \u2318K\n        \n      \n      \n\n        New navigation BETA\n         setTheme(theme === \"dark\" ? \"light\" : \"dark\")} title=\"Toggle light / dark\"&gt;{theme === \"dark\" ?  : }\n        \n        \n        \nSB\n      \n    \n  );\n}\nfunction HBtn({ children, onClick, title }) {\n  const [h, setH] = useState(false);\n  return  setH(true)} onMouseLeave={() =&gt; setH(false)} style={{ width: 32, height: 32, borderRadius: 8, border: \"none\", cursor: \"pointer\", background: h ? T.surface2 : \"transparent\", color: h ? T.ink : T.bg80, display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}&gt;{children};\n}\n\nconst HICONS = {\n  dashboard: '',\n  inventory: '',\n  shield: '',\n  bolt: '',\n  link: '',\n  chart: '',\n  cog: '',\n};\nfunction HIcon({ name, size = 20, color = \"currentColor\", sw = 1.6, className }) {\n  return ${HICONS[name] || \"\"}` }} /&gt;;\n}\nconst RAIL = [\n  { key: \"dashboard\", hi: \"dashboard\", label: \"Dashboard\" }, { key: \"assets\", hi: \"inventory\", label: \"Inventory\" },\n  { key: \"exposures\", hi: \"shield\", label: \"Exposures\" }, { key: \"action\", hi: \"bolt\", label: \"Action Center\" },\n  { key: \"adapters\", hi: \"link\", label: \"Adapters\" }, { key: \"analysis\", hi: \"chart\", label: \"Analysis\" },\n];\nfunction IconRail({ view, setView }) {\n  return (\n    \n\n      {RAIL.map(r =&gt;  setView(r.key)} /&gt;)}\n      \n\n       {}} /&gt;\n      \n\n    \n  );\n}\nfunction RailGlyph({ hi, label, active, onClick }) {\n  const [h, setH] = useState(false);\n  return (\n    \n setH(true)} onMouseLeave={() =&gt; setH(false)} title={label} className=\"ax-rail ax-press\"\n      style={{ position: \"relative\", width: 44, height: 44, borderRadius: 14, cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", background: active ? T.accentSoft : h ? T.surface2 : \"transparent\", transition: \"background .15s\" }}&gt;\n      \n    \n  );\n}\n\nconst DASH_TREE_INIT = [\n  { g: \"Favorites\", open: true, items: [\n    { nm: \"My Dashboard\", fav: true }, { nm: \"Asset Profile - Copy_2024-06-09\", fav: true },\n    { nm: \"Axonius Dashboard\", fav: true, active: true, def: true }, { nm: \"Cost Optimization\", fav: true }, { nm: \"Cloud Compliance\", fav: true },\n  ] },\n  { g: \"Public\", open: false, items: [\n    { folder: \"Security\", open: false, items: [{ nm: \"SecOps Overview\" }, { nm: \"Threat Intelligence\" }] },\n    { folder: \"Executive\", open: false, items: [{ nm: \"Executive Summary\" }, { nm: \"Board Report\" }] },\n    { nm: \"Asset Inventory V 1.0\" }, { nm: \"Active Directory Insights\" },\n  ] },\n  { g: \"Shared\", open: false, items: [\n    { folder: \"Team SOC\", open: false, items: [{ nm: \"Vulnerability Posture\" }, { nm: \"Incident Response\" }] },\n    { nm: \"Cloud Inventory\" }, { nm: \"Compliance Overview\" },\n  ] },\n  { g: \"Private\", open: false, items: [{ nm: \"My Drafts\" }, { nm: \"Work in Progress\" }] },\n  { g: \"Managed by Axonius\", open: false, items: [{ nm: \"Device Overview\" }, { nm: \"User Overview\" }, { nm: \"Adapters Health\" }, { nm: \"Coverage &amp; Gaps\" }] },\n];\nfunction PanelBtn({ primary, filled, icon: Icon, children, onClick }) {\n  const [h, setH] = useState(false);\n  return (\n     setH(true)} onMouseLeave={() =&gt; setH(false)} className={filled ? \"ax-primary\" : \"ax-press\"}\n      style={{ height: 38, borderRadius: 999, border: filled ? \"none\" : primary ? `1.5px solid ${T.accentText}` : `1px solid ${h ? T.lineStrong : T.line}`, cursor: \"pointer\", width: \"100%\", background: filled ? (h ? T.blueDeep : T.blue) : primary ? (h ? T.accentSoft : \"transparent\") : h ? T.surface2 : \"transparent\", color: filled ? T.onAccent : primary ? T.accentText : T.body, fontSize: 13, fontWeight: 600, fontFamily: T.font, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", gap: 7, boxShadow: \"none\", transition: \"background .14s ease, border-color .14s ease\" }}&gt;\n       {children}\n    \n  );\n}\nfunction CreateDashModal({ onCreate, close }) {\n  const [name, setName] = useState(\"\");\n  const [tpl, setTpl] = useState(\"blank\");\n  const tpls = [{ k: \"blank\", t: \"Blank dashboard\", d: \"Start from an empty canvas\" }, { k: \"template\", t: \"From a template\", d: \"Prebuilt charts to tweak\" }];\n  return createPortal(\n    \n\n      \n e.stopPropagation()} style={{ width: 480, maxWidth: \"92vw\", background: T.canvas, border: `1px solid ${T.line}`, borderRadius: 14, boxShadow: \"0 30px 80px rgba(0,0,0,.55)\", overflow: \"hidden\", animation: \"axRise .26s cubic-bezier(.22,1,.36,1) both\" }}&gt;\n        \n\n          Create dashboard\n          \n        \n        \n\n          \n\n            Dashboard name\n             setName(e.target.value)} placeholder=\"e.g. Security Posture\" style={{ width: \"100%\", height: 40, padding: \"0 14px\", border: `1px solid ${T.line}`, borderRadius: 8, background: T.control, color: T.ink, fontFamily: T.font, fontSize: 14, outline: \"none\", boxSizing: \"border-box\" }} /&gt;\n          \n          \n\n            Starting point\n            \n\n              {tpls.map(o =&gt; (\n                 setTpl(o.k)} style={{ flex: 1, textAlign: \"left\", padding: \"12px 13px\", borderRadius: 10, border: `1.5px solid ${tpl === o.k ? T.accentText : T.line}`, background: tpl === o.k ? T.accentSoft : \"transparent\", cursor: \"pointer\", fontFamily: T.font }}&gt;\n                  \n{o.t}\n                  \n{o.d}\n                \n              ))}\n            \n          \n        \n        \n\n          Cancel\n           name.trim() &amp;&amp; onCreate(name.trim())} className=\"ax-press\" style={{ height: 38, padding: \"0 18px\", borderRadius: 999, border: \"none\", background: name.trim() ? T.blue : T.surface2, color: name.trim() ? T.onAccent : T.faint, fontSize: 13.5, fontWeight: 600, cursor: name.trim() ? \"pointer\" : \"default\", fontFamily: T.font }}&gt;Create dashboard\n        \n      \n    , document.body);\n}\nfunction SidePanel({ collapsed, setCollapsed, activeDash, setActiveDash }) {\n  const [tree, setTree] = useState(DASH_TREE_INIT);\n  const [menu, setMenu] = useState(null);\n  const [editing, setEditing] = useState(null);\n  const [createOpen, setCreateOpen] = useState(false);\n\n  const mut = (fn) =&gt; setTree(t =&gt; fn(t.map(g =&gt; ({ ...g, items: g.items.map(it =&gt; ({ ...it })) }))));\n  const toggleGroup = (gi) =&gt; setTree(t =&gt; t.map((g, i) =&gt; i === gi ? { ...g, open: !g.open } : g));\n  const setActive = (gi, ii) =&gt; { mut(t =&gt; { t.forEach(g =&gt; g.items.forEach(it =&gt; it.active = false)); t[gi].items[ii].active = true; return t; }); if (setActiveDash) setActiveDash(tree[gi].items[ii].nm); };\n  const toggleFav = (gi, ii) =&gt; mut(t =&gt; { t[gi].items[ii].fav = !t[gi].items[ii].fav; return t; });\n  const setDefault = (gi, ii) =&gt; mut(t =&gt; { t.forEach(g =&gt; g.items.forEach(it =&gt; it.def = false)); t[gi].items[ii].def = true; return t; });\n  const duplicate = (gi, ii) =&gt; mut(t =&gt; { t[gi].items.splice(ii + 1, 0, { nm: t[gi].items[ii].nm + \" (copy)\" }); return t; });\n  const rename = (gi, ii, nm) =&gt; mut(t =&gt; { t[gi].items[ii].nm = nm || t[gi].items[ii].nm; return t; });\n  const remove = (gi, ii) =&gt; mut(t =&gt; { t[gi].items.splice(ii, 1); return t; });\n  const createDash = (nm) =&gt; mut(t =&gt; { const p = t.find(g =&gt; g.g === \"Private\"); p.open = true; p.items.push({ nm: nm || \"Untitled dashboard\" }); return t; });\n  const openMenu = (gi, ii, e) =&gt; { const r = e.currentTarget.getBoundingClientRect(); setMenu({ gi, ii, top: r.bottom + 6, left: Math.max(8, r.right - 196) }); };\n\n  if (collapsed) {\n    const favItems = tree.flatMap(g =&gt; g.items).filter(it =&gt; it.fav || it.active);\n    return (\n      \n\n         setCollapsed(false)} title=\"Expand dashboards\" className=\"ax-edge-collapse\"\n          style={{ position: \"absolute\", top: 16, right: -14, zIndex: 6, width: 28, height: 28, borderRadius: \"50%\", border: `1px solid ${T.line}`, background: T.surface, color: T.muted, cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", boxShadow: T.shadow }}&gt;\n          \n        \n         setCreateOpen(true)} style={{ width: 38, height: 38, borderRadius: 8, border: `1.5px solid ${T.accentText}`, background: \"transparent\", cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", color: T.accentText }}&gt;\n          \n        \n        \n\n        {favItems.map((s, i) =&gt; (\n          \n\n            \n            {s.fav &amp;&amp; }\n          \n        ))}\n        {createOpen &amp;&amp;  { createDash(nm); setCreateOpen(false); }} close={() =&gt; setCreateOpen(false)} /&gt;}\n      \n    );\n  }\n  return (\n    \n\n       setCollapsed(true)} title=\"Collapse panel\" className=\"ax-edge-collapse\"\n        style={{ position: \"absolute\", top: 16, right: -14, zIndex: 6, width: 28, height: 28, borderRadius: \"50%\", border: `1px solid ${T.line}`, background: T.surface, color: T.muted, cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", boxShadow: T.shadow }}&gt;\n        \n      \n      \n\n         setCreateOpen(true)}&gt;Create Dashboard\n        Manage Dashboards\n      \n      \n\n        \n\n          \n        \n      \n      \n\n        {tree.map((g, gi) =&gt; (\n          \n        ))}\n      \n      {menu &amp;&amp;  setMenu(null)}\n        actions={{ rename: () =&gt; setEditing({ gi: menu.gi, ii: menu.ii }), duplicate, toggleFav, setDefault, remove }} /&gt;}\n      {createOpen &amp;&amp;  { createDash(nm); setCreateOpen(false); }} close={() =&gt; setCreateOpen(false)} /&gt;}\n    \n  );\n}\nconst DASH_CAT_ICON = { Favorites: Star, Public: Globe, Shared: Users, Private: Lock, \"Managed by Axonius\": ShieldCheck };\nfunction DashGroup({ group, gi, toggleGroup, setActive, toggleFav, openMenu, editing, setEditing, rename }) {\n  const Icon = DASH_CAT_ICON[group.g] || LayoutGrid;\n  return (\n    \n\n       toggleGroup(gi)} className=\"ax-catrow\"\n        style={{ display: \"flex\", alignItems: \"center\", gap: 9, width: \"100%\", border: \"none\", background: \"transparent\", cursor: \"pointer\", padding: \"8px 8px\", borderRadius: 8, fontFamily: T.font }}&gt;\n        \n        \n        {group.g}\n        {group.g === \"Favorites\" ? group.items.filter(it =&gt; it.fav !== false).length : group.items.length}\n      \n      {group.open &amp;&amp; group.items\n        .filter(it =&gt; group.g !== \"Favorites\" || it.fav !== false)\n        .map((it, ii) =&gt;\n          it.folder\n            ? \n            : \n        )}\n    \n  );\n}\nfunction DashFolder({ folder, indent, onToggle }) {\n  const [h, setH] = useState(false);\n  const [open, setOpen] = useState(folder.open);\n  const toggle = () =&gt; { setOpen(o =&gt; !o); if (onToggle) onToggle(!open); };\n  const FIcon = open ? FolderOpen : Folder;\n  return (\n    \n\n      \n setH(true)} onMouseLeave={() =&gt; setH(false)} onClick={toggle}\n        style={{ display: \"flex\", alignItems: \"center\", gap: 8, height: 34, padding: `0 8px 0 ${indent || 22}px`, borderRadius: 8, cursor: \"pointer\", background: h ? T.surface2 : \"transparent\", transition: \"background .12s\" }}&gt;\n        \n        \n        {folder.folder}\n      \n      {open &amp;&amp; folder.items.map((it, i) =&gt; (\n        \n e.currentTarget.style.background = T.surface2} onMouseLeave={(e) =&gt; e.currentTarget.style.background = \"transparent\"}&gt;\n          \n          {it.nm}\n        \n      ))}\n    \n  );\n}\nfunction DashItem({ item, gi, ii, setActive, toggleFav, openMenu, editing, setEditing, rename }) {\n  const [h, setH] = useState(false);\n  return (\n    \n setH(true)} onMouseLeave={() =&gt; setH(false)} onClick={() =&gt; !editing &amp;&amp; setActive(gi, ii)} className=\"ax-press\"\n      style={{ position: \"relative\", display: \"flex\", alignItems: \"center\", gap: 9, height: 36, padding: \"0 8px 0 28px\", margin: \"1px 0\", cursor: \"pointer\", borderRadius: 8, border: \"none\", background: item.active ? T.accentSoft : h ? T.surface2 : \"transparent\", transition: \"background .14s\" }}&gt;\n      \n      {editing ? (\n         e.stopPropagation()}\n          onBlur={(e) =&gt; { rename(gi, ii, e.target.value.trim()); setEditing(null); }}\n          onKeyDown={(e) =&gt; { if (e.key === \"Enter\") { rename(gi, ii, e.target.value.trim()); setEditing(null); } if (e.key === \"Escape\") setEditing(null); }}\n          style={{ flex: 1, minWidth: 0, border: `1px solid ${T.blue}`, borderRadius: 6, padding: \"2px 6px\", fontSize: 13.5, fontFamily: T.font, color: T.ink, outline: \"none\", background: T.surface }} /&gt;\n      ) : (\n        {item.nm}\n      )}\n      {(h || item.fav) &amp;&amp; !editing &amp;&amp; (\n         { e.stopPropagation(); toggleFav(gi, ii); }} title={item.fav ? \"Remove from favorites\" : \"Add to favorites\"} className=\"ax-star\"\n          style={{ width: 22, height: 22, borderRadius: 6, border: \"none\", background: \"transparent\", cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", padding: 0, flexShrink: 0 }}&gt;\n          \n        \n      )}\n      {h &amp;&amp; !editing &amp;&amp; (\n         { e.stopPropagation(); openMenu(gi, ii, e); }} title=\"More actions\"\n          style={{ width: 22, height: 22, borderRadius: 6, border: \"none\", background: \"transparent\", cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", padding: 0, flexShrink: 0, color: T.muted }}&gt;\n          \n        \n      )}\n    \n  );\n}\nfunction RowMenu({ menu, tree, close, actions }) {\n  const it = tree[menu.gi]?.items?.[menu.ii] || {};\n  const rows = [\n    { ic: Pencil, l: \"Rename\", fn: () =&gt; actions.rename() },\n    { ic: Copy, l: \"Duplicate\", fn: () =&gt; actions.duplicate(menu.gi, menu.ii) },\n    { ic: Star, l: it.fav ? \"Remove from favorites\" : \"Add to favorites\", fn: () =&gt; actions.toggleFav(menu.gi, menu.ii) },\n    { ic: Check, l: it.def ? \"Default dashboard\" : \"Set as default\", fn: () =&gt; actions.setDefault(menu.gi, menu.ii) },\n    { ic: Download, l: \"Export\", fn: () =&gt; {} },\n    { sep: true },\n    { ic: Trash2, l: \"Delete\", danger: true, fn: () =&gt; actions.remove(menu.gi, menu.ii) },\n  ];\n  return (\n    &lt;&gt;\n      \n\n      \n\n        {rows.map((a, i) =&gt; a.sep\n          ? \n\n          :  { a.fn(); close(); }}&gt;{a.l})}\n      \n    \n  );\n}\nfunction MenuRow({ icon: Icon, danger, children, onClick }) {\n  const [h, setH] = useState(false);\n  return (\n     setH(true)} onMouseLeave={() =&gt; setH(false)}\n      style={{ display: \"flex\", alignItems: \"center\", gap: 9, width: \"100%\", border: \"none\", borderRadius: 8, cursor: \"pointer\", padding: \"7px 9px\", fontSize: 13, fontFamily: T.font, fontWeight: 500, textAlign: \"left\", color: danger ? T.red : T.body, background: h ? (danger ? `${T.red}10` : T.canvas) : \"transparent\" }}&gt;\n       {children}\n    \n  );\n}\n\nfunction ModuleHeader({ view, activeDash }) {\n  const isDash = view === \"dashboard\";\n  return (\n    \n\n      \n{isDash ? \"Dashboards / Favorites\" : \"Assets / All Devices\"}\n      \n\n        \n\n          \n{isDash ? activeDash : \"Assets\"}\n          {isDash &amp;&amp; }\n        \n        \n\n          {isDash ? &lt;&gt;\n             Updated 2m ago\n            Add Chart\n           : &lt;&gt;\n            Export\n            New Query\n          }\n          \n        \n      \n    \n  );\n}\nfunction HdrBtn({ icon: Icon, children, primary, filled }) {\n  const [h, setH] = useState(false);\n  return  setH(true)} onMouseLeave={() =&gt; setH(false)} style={{ display: \"flex\", alignItems: \"center\", gap: 6, height: 34, padding: \"0 14px\", borderRadius: 999, cursor: \"pointer\", fontFamily: T.font, fontSize: 13.5, fontWeight: 600, border: filled ? \"none\" : (primary ? `1.5px solid ${T.accentText}` : `1px solid ${h ? T.lineStrong : T.line}`), background: filled ? (h ? T.blueDeep : T.blue) : (primary ? (h ? T.accentSoft : \"transparent\") : (h ? T.surface2 : T.control)), color: filled ? T.onAccent : (primary ? T.accentText : T.body) }}&gt;{children};\n}\n\nfunction AxoniusApp() {\n  const [view, setView] = useState(\"dashboard\");\n  const [collapsed, setCollapsed] = useState(false);\n  const [invCollapsed, setInvCollapsed] = useState(false);\n  const [theme, setTheme] = useState(\"dark\");\n  const [activeDash, setActiveDash] = useState(\"Axonius Dashboard\");\n  T = THEMES[theme];\n  useEffect(() =&gt; {\n    document.body.style.background = THEMES[theme].shell;\n    const el = document.documentElement;\n    el.classList.add(\"theming\");\n    const id = setTimeout(() =&gt; el.classList.remove(\"theming\"), 450);\n    return () =&gt; clearTimeout(id);\n  }, [theme]);\n  return (\n    \n\n      {`@import url('https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500;600;700&amp;family=Schibsted+Grotesk:wght@500;600;700&amp;display=swap'); * { box-sizing: border-box; } .theming, .theming * { transition: background-color .4s ease, border-color .4s ease, color .35s ease, fill .3s ease, stroke .3s ease !important; } *::-webkit-scrollbar { width: 9px; height: 9px; } *::-webkit-scrollbar-thumb { background: ${T.bg40}; border-radius: 5px; } *::-webkit-scrollbar-track { background: transparent; }\n        .ax-tile *::-webkit-scrollbar-thumb { background: transparent; transition: background .2s ease; }\n        .ax-tile:hover *::-webkit-scrollbar-thumb { background: ${T.bg40}; }\n        .ax-tbl::-webkit-scrollbar-thumb { background: transparent; } .ax-tbl:hover::-webkit-scrollbar-thumb { background: ${T.bg40}; } .ax-tbl::-webkit-scrollbar-corner { background: transparent; }\n        input::placeholder { color: ${T.muted}; opacity: 1; }\n        .ax-catrow:hover { background: ${T.surface2}; }\n        .ax-catrow:hover .ax-favbtn { opacity: 1 !important; }\n        .ax-edge-collapse { opacity: 0; transform: scale(.8); transition: opacity .15s ease, transform .15s ease; }\n        .ax-sidepanel:hover .ax-edge-collapse { opacity: 1; transform: scale(1); }\n        button, [role=\"button\"] { transition: transform .14s cubic-bezier(.34,1.56,.64,1), background-color .15s ease, box-shadow .18s ease, border-color .15s ease, color .12s ease; }\n        button:not(:disabled):active { transform: scale(.92); }\n        .ax-press { transition: transform .14s cubic-bezier(.34,1.56,.64,1), background-color .14s ease; }\n        .ax-press:active { transform: scale(.95); }\n        .ax-card { transition: transform .2s cubic-bezier(.34,1.56,.64,1), box-shadow .2s ease, border-color .15s ease; }\n        .ax-card:hover { border-color: ${T.lineStrong} !important; box-shadow: ${T.shadow} !important; }\n        .ax-primary:hover { transform: translateY(-1px); box-shadow: 0 6px 16px rgba(37,99,235,.4) !important; }\n        .ax-primary:active { transform: translateY(0) scale(.96); }\n        @keyframes axRise { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }\n        .ax-rise { animation: axRise .45s cubic-bezier(.22,1,.36,1) both; }\n        @keyframes axJiggle { 0%, 100% { transform: rotate(-0.5deg); } 50% { transform: rotate(0.5deg); } }\n        .ax-jiggle { animation: axJiggle .32s ease-in-out infinite; }\n        @keyframes axPop { 0% { transform: scale(1); } 45% { transform: scale(1.25) rotate(-8deg); } 100% { transform: scale(1); } }\n        .ax-star:hover { animation: axPop .4s ease; }\n        @keyframes axSpin { to { transform: rotate(360deg); } }\n        .ax-spin:hover { animation: axSpin .6s ease; }\n        button:not(:disabled):hover { transform: translateY(-1px); }\n        @keyframes axGrow { from { transform: scaleX(0); } to { transform: scaleX(1); } }\n        @keyframes axGrowY { from { transform: scaleY(0); } to { transform: scaleY(1); } }\n        @keyframes axDraw { to { stroke-dashoffset: 0; } }\n        @keyframes axFade { from { opacity: 0; } to { opacity: 1; } }\n        @keyframes axSlideIn { from { transform: translateX(100%); } to { transform: translateX(0); } }\n        @keyframes axBounce { 0% { transform: translateY(0) scale(1); } 35% { transform: translateY(-4px) scale(1.14); } 70% { transform: translateY(0) scale(1); } 100% { transform: translateY(0) scale(1); } }\n        .ax-rail:hover .ax-railicon { animation: axBounce .5s ease; }\n        .ax-flat:hover { transform: none !important; }`}\n      \n      \n\n        \n        \n\n          {view === \"dashboard\" &amp;&amp; }\n          {view === \"assets\" &amp;&amp; }\n          \n\n            {view === \"dashboard\" &amp;&amp; }\n            {view === \"dashboard\" ? (\n              \n\n                {DASH_TILESETS[activeDash]\n                  ? \n                  : &lt;&gt;}\n              \n            ) : view === \"assets\" ? (\n              \n            ) : (\n              \n\n                {RAIL.find(r =&gt; r.key === view)?.label} view \u2014 coming soon\n              \n            )}\n          \n        \n      \n    \n  );\n}\n\ncreateRoot(document.getElementById(\"root\")).render();\n    \n  \n    fetch('/.inspector/overlay.js')\n      .then(r =&gt; r.text())\n      .then(code =&gt; { const s = document.createElement('script'); s.textContent = code; document.head.appendChild(s); })\n      .catch(() =&gt; {});\n  \n  \n\n", "creation_timestamp": "2026-06-23T09:25:09.000000Z"}, {"uuid": "80574d1d-e5c3-4eed-9bb9-085343a305b5", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://gist.github.com/ShaiOnionGod/a2470d5624f426a312bf6d47e9b8a91c", "content": "\n\n  \n    \n    \n    Axonius \u2014 Dashboard prototype\n    \n    \n      {\n        \"imports\": {\n          \"react\": \"https://esm.sh/react@18.3.1\",\n          \"react-dom\": \"https://esm.sh/react-dom@18.3.1\",\n          \"react-dom/client\": \"https://esm.sh/react-dom@18.3.1/client\",\n          \"lucide-react\": \"https://esm.sh/lucide-react@0.456.0?deps=react@18.3.1\"\n        }\n      }\n    \n    \n    \n      html, body { margin: 0; height: 100%; background: #191A23; font-family: 'Hanken Grotesk', -apple-system, BlinkMacSystemFont, sans-serif; }\n      #root { height: 100%; }\n      .sb-tag { position: fixed; right: 14px; bottom: 12px; z-index: 99999; font: 700 10px/1 ui-monospace, monospace; letter-spacing: .14em; color: #0D5ED7; background: rgba(255,255,255,.9); border: 1px solid #E0E4EC; border-radius: 999px; padding: 6px 10px; box-shadow: 0 6px 18px rgba(27,32,70,.12); pointer-events: none; }\n    \n  \n  \n    \n\n    \nSANDBOX\n\n    \nimport React, { useState, useRef, useCallback, useEffect } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport { createPortal } from \"react-dom\";\nimport {\n  Search, Star, MoreHorizontal, Info, ListFilter, ArrowUpDown, Columns3,\n  Plus, ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight, ChevronDown,\n  ArrowUpRight, ArrowDownRight, LayoutGrid, Server, ShieldCheck, Boxes,\n  Workflow, Cable, Bell, CircleHelp, Clock, Play, Grip, PanelLeftClose,\n  PanelLeftOpen, Download, GripVertical, X, Settings, ShieldAlert, Crosshair,\n  Pin, PinOff, RotateCw, Filter, Table2, ChevronsUpDown, Pencil, Check, Trash2,\n  Users, Layers, RotateCcw, Save, Copy, Calendar, Menu, Zap, Link, BarChart3, Sun, Moon,\n  Globe, Lock, Folder, FolderOpen\n} from \"lucide-react\";\n\n/**\n * Axonius \u2014 Dashboard + Assets table views\n * Collapsible side panel \u00b7 resizable + reorderable dashboard tiles\n * Real Axonius header \u00b7 Twenty-style table \u00b7 tokens from Figma source\n */\n\nfunction AxoniusLogo() {\n  return `.replaceAll('fill=\"black\"', `fill=\"${T.ink}\"`) }} /&gt;;\n}\n\n// Data / highlight palette \u2014 bright fills used in both themes (light-mode text variants applied where colored text is needed)\nconst VIZ = { green: \"#5BC4BF\", greenDeep: \"#247D78\", mint: \"#8ED0FF\", lilac: \"#AD85FF\", lilacPale: \"#CDB4FF\", orange: \"#FF8C66\", amber: \"#FFB286\" };\nconst FONT = \"'Hanken Grotesk', -apple-system, sans-serif\", DISPLAY = \"'Schibsted Grotesk', -apple-system, sans-serif\";\nconst THEMES = {\n  dark: {\n    ink: \"#E4E8F0\", body: \"#AEB7CC\", muted: \"#8494B5\", faint: \"#69738C\",\n    line: \"rgba(132,148,181,0.20)\", lineSoft: \"rgba(132,148,181,0.12)\", hair: \"rgba(132,148,181,0.09)\", lineStrong: \"rgba(132,148,181,0.42)\",\n    bg100: \"#AEB7CC\", bg90: \"#9AA3BC\", bg80: \"#8494B5\", bg40: \"#8494B5\",\n    blue: \"#5C7CFF\", blueDeep: \"#4E6CF5\", green: \"#5BC4BF\", red: \"#FF8C66\",\n    shell: \"#191A23\", headerBg: \"#191A23\", canvas: \"#191A23\", surface: \"#222431\", surface2: \"#2A2D3C\", control: \"#262838\",\n    white: \"#FFFFFF\", onAccent: \"#191A23\", isLight: false, coin: \"#2A2D3C\", accentSoft: \"rgba(92,124,255,0.16)\", accentText: \"#5C7CFF\", accentBorder: \"rgba(92,124,255,0.50)\",\n    viz: VIZ, shadow: \"0 1px 2px rgba(0,0,0,0.4), 0 14px 34px rgba(0,0,0,0.5)\", font: FONT, display: DISPLAY,\n  },\n  light: {\n    ink: \"#2E3850\", body: \"#465472\", muted: \"#6B7894\", faint: \"#8494B5\",\n    line: \"rgba(132,148,181,0.30)\", lineSoft: \"rgba(132,148,181,0.18)\", hair: \"rgba(132,148,181,0.12)\", lineStrong: \"rgba(132,148,181,0.55)\",\n    bg100: \"#465472\", bg90: \"#5A6889\", bg80: \"#8494B5\", bg40: \"#8494B5\",\n    blue: \"#4361EE\", blueDeep: \"#3A55D6\", green: \"#247D78\", red: \"#BF4B26\",\n    shell: \"#F9FAFB\", headerBg: \"#F9FAFB\", canvas: \"#FFFFFF\", surface: \"#FFFFFF\", surface2: \"#F1F2F6\", control: \"#FFFFFF\",\n    white: \"#FFFFFF\", onAccent: \"#FFFFFF\", isLight: true, coin: \"#FFFFFF\", accentSoft: \"rgba(67,97,238,0.10)\", accentText: \"#4361EE\", accentBorder: \"rgba(67,97,238,0.45)\",\n    viz: VIZ, shadow: \"0 1px 2px rgba(70,84,114,0.06), 0 10px 26px rgba(70,84,114,0.08)\", font: FONT, display: DISPLAY,\n  },\n};\nlet T = THEMES.dark;\n// Severity scale stays semantic (red \u2192 orange \u2192 yellow \u2192 green, neutral for informational) in both themes\nconst SEVC = { critical: \"#E5484D\", high: \"#F0743E\", medium: \"#F5C28C\", low: \"#4F8FE3\", info: \"#CFC4F2\" };\nconst fmt = (n) =&gt; n.toLocaleString(\"en-US\");\nconst tnum = { fontFeatureSettings: '\"tnum\" 1', fontVariantNumeric: \"tabular-nums\" };\n\n/* ============ vendor logos ============ */\nfunction LogoMark({ brand, size = 32 }) {\n  const glyph = {\n    aws: aws,\n    microsoft: ,\n    azure: ,\n    googlecloud: ,\n    oracle: ,\n    vmware: vm,\n    okta: ,\n    crowdstrike: ,\n    active_directory: ,\n    sentinelone: ,\n    service_now: ,\n    cisco: cisco,\n    cisco_meraki: ,\n    cisco_ise: cisco,\n    checkpoint: ,\n    chef: ,\n    claroty: ,\n    cylance: ,\n    epo: ,\n    paloalto: ,\n    tanium: ,\n    tenable: ,\n    forescout: ,\n    zoom: ,\n    miro: ,\n    dropbox: ,\n    salesforce: ,\n    slack: ,\n    office365: ,\n    google_workspace: ,\n  }[brand] || {(brand || \"?\").slice(0, 2).toUpperCase()};\n  return \n{glyph};\n}\n\n/* ============ chips ============ */\n// Tags use the dashboard data palette (turquoise / purple / baby-blue / orange) \u2014 dark text variant in light mode, bright in dark\nconst TAGV = [{ b: \"#5BC4BF\", d: \"#247D78\" }, { b: \"#AD85FF\", d: \"#683CB5\" }, { b: \"#8ED0FF\", d: \"#1E75B3\" }, { b: \"#FF8C66\", d: \"#BF4B26\" }];\nfunction Tag({ label }) {\n  let n = 0; for (let i = 0; i &lt; label.length; i++) n = (n * 31 + label.charCodeAt(i)) &gt;&gt;&gt; 0;\n  const t = TAGV[n % TAGV.length];\n  return {label};\n}\n// Cursor-following tooltip (like sandbox 2) \u2014 surface card with readable dark text\nfunction FloatTip({ x, y, children }) {\n  return createPortal(\n{children}, document.body);\n}\nfunction UserAvatar({ name, size = 24 }) {\n  const s = name || \"?\"; let n = 0; for (let i = 0; i &lt; s.length; i++) n = (n * 31 + s.charCodeAt(i)) &gt;&gt;&gt; 0;\n  const t = TAGV[n % TAGV.length];\n  return {s.trim()[0] || \"?\"};\n}\nconst APP_LOGO_MAP = {\n  Zoom: \"zoom\", \"Zoom One Pro\": \"zoom\",\n  Miro: \"miro\",\n  Dropbox: \"dropbox\",\n  Salesforce: \"salesforce\",\n  Slack: \"slack\",\n  Google: \"googlecloud\", \"Google WS Ent. Starter\": \"google_workspace\", \"Google WS Ent. Standard\": \"google_workspace\", \"Google WS Business\": \"google_workspace\",\n  Office365: \"office365\", \"Microsoft 365 G3 GCC\": \"office365\", \"Microsoft 365 E5\": \"office365\", \"Microsoft Power Aut\u2026\": \"office365\",\n  Microsoft: \"microsoft\",\n};\nfunction AppAvatar({ name, size = 22 }) {\n  const brand = APP_LOGO_MAP[name];\n  if (brand) return ;\n  const s = name || \"?\"; let n = 0; for (let i = 0; i &lt; s.length; i++) n = (n * 31 + s.charCodeAt(i)) &gt;&gt;&gt; 0;\n  const t = TAGV[n % TAGV.length];\n  return {s.trim()[0] || \"?\"};\n}\nconst STATUS = { Active: T.green, Warning: T.viz.amber, Inactive: T.faint, Error: T.red };\nfunction StatusChip({ status }) {\n  return {status};\n}\nconst RISK = { Critical: SEVC.critical, High: SEVC.high, Medium: SEVC.medium, Low: SEVC.low };\nfunction RiskChip({ level }) {\n  const c = RISK[level];\n  return {level};\n}\nfunction Delta({ up, children }) {\n  const color = up ? T.green : T.red;\n  return {up ?  : }{children};\n}\nfunction IconBtn({ children, onClick }) {\n  const [h, setH] = useState(false);\n  return  setH(true)} onMouseLeave={() =&gt; setH(false)} style={{ width: 26, height: 26, borderRadius: 6, border: \"none\", cursor: \"pointer\", background: h ? T.surface2 : \"transparent\", color: h ? T.ink : T.faint, display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}&gt;{children};\n}\n\n/* ============ KPIs ============ */\nconst KPIS = [\n  { label: \"Total Assets\", value: 84355, delta: \"12.4%\", up: true },\n  { label: \"Cloud Coverage\", value: 96.2, suffix: \"%\", delta: \"2.1%\", up: true },\n  { label: \"Open Vulnerabilities\", value: 382, delta: \"8.0%\", up: false },\n  { label: \"Unmanaged Devices\", value: 1204, delta: \"3.2%\", up: false },\n];\nfunction useCountUp(target, dur = 950) {\n  const [v, setV] = useState(0);\n  useEffect(() =&gt; {\n    let raf; const start = performance.now();\n    const tick = (now) =&gt; { const p = Math.min(1, (now - start) / dur); setV(target * (1 - Math.pow(1 - p, 3))); if (p &lt; 1) raf = requestAnimationFrame(tick); };\n    raf = requestAnimationFrame(tick); return () =&gt; cancelAnimationFrame(raf);\n  }, [target]);\n  return v;\n}\nfunction KpiValue({ value, suffix }) {\n  const v = useCountUp(value);\n  const text = suffix === \"%\" ? v.toFixed(1) : fmt(Math.round(v));\n  return {text}{suffix || \"\"};\n}\nfunction KpiRow() {\n  return (\n    \n\n      {KPIS.map((k, i) =&gt; (\n        \n\n          \n{k.label}\n          \n\n            \n            {k.delta}\n          \n        \n      ))}\n    \n  );\n}\n\n/* ============ chart bodies ============ */\nconst PIE = [\n  { c: \"green\", label: \"Windows Assets\", val: 1236 }, { c: \"greenDeep\", label: \"Active Directory\", val: 411 },\n  { c: \"mint\", label: \"SCCM Managed\", val: 198 }, { c: \"lilac\", label: \"Intune Managed\", val: 89 }, { c: \"lilacPale\", label: \"Unmanaged\", val: 43 },\n];\nfunction DonutBody() {\n  const [hi, setHi] = useState(null);\n  const [tip, setTip] = useState(null);\n  const [off, setOff] = useState(() =&gt; new Set());\n  const [drawn, setDrawn] = useState(false);\n  useEffect(() =&gt; { const id = setTimeout(() =&gt; setDrawn(true), 60); return () =&gt; clearTimeout(id); }, []);\n  const r = 46, sw = 14, C = 2 * Math.PI * r, gap = 5;\n  const toggle = (i) =&gt; setOff(s =&gt; { const n = new Set(s); n.has(i) ? n.delete(i) : n.add(i); return n; });\n  const visTotal = PIE.reduce((a, p, i) =&gt; a + (off.has(i) ? 0 : p.val), 0) || 1;\n  let acc = 0;\n  const segs = PIE.map((p, i) =&gt; {\n    if (off.has(i)) return null;\n    const len = (p.val / visTotal) * C;\n    const seg = Math.max(1, len - gap);\n    const active = hi === i, dim = hi !== null &amp;&amp; !off.has(hi) &amp;&amp; !active;\n    const node = (\n       { setHi(i); setTip({ i, x: e.clientX, y: e.clientY }); }} onMouseMove={(e) =&gt; setTip({ i, x: e.clientX, y: e.clientY })} onMouseLeave={() =&gt; { setHi(null); setTip(null); }} onClick={() =&gt; toggle(i)}\n        style={{ opacity: dim ? 0.35 : 1, cursor: \"pointer\", transition: \"stroke-dasharray .8s cubic-bezier(.22,1,.36,1), stroke-width .18s ease, opacity .18s ease\" }} /&gt;\n    );\n    acc += len; return node;\n  });\n  const liveHi = hi !== null &amp;&amp; !off.has(hi);\n  const center = liveHi ? { big: ((PIE[hi].val / visTotal) * 100).toFixed(1) + \"%\", small: PIE[hi].label } : { big: fmt(visTotal), small: \"Total Assets\" };\n  return (\n    \n\n      \n\n        \n          \n          {segs}\n        \n        \n\n          {center.big}\n          {center.small}\n        \n      \n      \n\n        {PIE.map((p, i) =&gt; {\n          const isOff = off.has(i);\n          return (\n            \n { setHi(i); if (!isOff) setTip({ i, x: e.clientX, y: e.clientY }); }} onMouseMove={(e) =&gt; !isOff &amp;&amp; setTip({ i, x: e.clientX, y: e.clientY })} onMouseLeave={() =&gt; { setHi(null); setTip(null); }} onClick={() =&gt; toggle(i)}\n              title={isOff ? \"Click to show\" : \"Click to hide\"}\n              style={{ display: \"flex\", alignItems: \"center\", gap: 9, padding: \"5px 6px\", borderRadius: 6, cursor: \"pointer\", background: hi === i &amp;&amp; !isOff ? T.canvas : \"transparent\", transition: \"background .12s\" }}&gt;\n              \n              {p.label}\n              {isOff ? \"Hidden\" : (hi === i ? fmt(p.val) : ((p.val / visTotal) * 100).toFixed(1) + \"%\")}\n            \n          );\n        })}\n      \n      {tip !== null &amp;&amp; !off.has(tip.i) &amp;&amp; \n        \n{PIE[tip.i].label}\n        \n{fmt(PIE[tip.i].val)}\n        \n{(PIE[tip.i].val / visTotal * 100).toFixed(1)}% of assets\n      }\n    \n  );\n}\nconst LINE_LABELS = [\"W1\", \"W2\", \"W3\", \"W4\", \"W5\", \"W6\", \"W7\", \"W8\", \"W9\", \"W10\", \"W11\", \"W12\"];\nconst LINE_SERIES = [\n  { key: \"all\", label: \"All Devices\", color: T.viz.green, pts: [38000, 41200, 44500, 47800, 51000, 55300, 59800, 63200, 68500, 72100, 78400, 84355] },\n  { key: \"managed\", label: \"Managed\", color: T.viz.lilac, pts: [29000, 31000, 33500, 35800, 38000, 41000, 44500, 47200, 50500, 54100, 58400, 61200] },\n  { key: \"cloud\", label: \"Cloud\", color: T.viz.orange, pts: [8000, 9200, 10500, 11800, 13000, 14300, 15800, 17200, 18500, 20100, 21400, 22097] },\n  { key: \"unmanaged\", label: \"Unmanaged\", color: T.viz.greenDeep, pts: [3200, 3100, 3300, 3000, 3500, 3300, 3100, 2900, 2700, 2500, 2300, 2100] },\n];\nfunction LineBody() {\n  const [off, setOff] = useState(() =&gt; new Set());\n  const [hov, setHov] = useState(null);\n  const w = 680, h = 196, padT = 12, padB = 12, padL = 8, padR = 8, n = LINE_LABELS.length, max = 90000;\n  const yAxisW = 40;\n  const X = (i) =&gt; padL + (i / (n - 1)) * (w - padL - padR);\n  const Y = (v) =&gt; padT + (1 - v / max) * (h - padT - padB);\n  const smooth = (pts) =&gt; { let d = `M ${X(0)} ${Y(pts[0])}`; for (let i = 1; i &lt; n; i++) { const cx = (X(i - 1) + X(i)) / 2; d += ` C ${cx} ${Y(pts[i - 1])}, ${cx} ${Y(pts[i])}, ${X(i)} ${Y(pts[i])}`; } return d; };\n  const toggle = (k) =&gt; setOff(s =&gt; { const x = new Set(s); x.has(k) ? x.delete(k) : x.add(k); return x; });\n  const visible = LINE_SERIES.filter(s =&gt; !off.has(s.key));\n  const xPct = (i) =&gt; (X(i) / w) * 100, yPct = (v) =&gt; (Y(v) / h) * 100;\n  const yTicks = [90000, 60000, 30000, 0];\n  return (\n    \n\n      \n\n        {/* Y-axis labels */}\n        \n\n          {yTicks.map((v, i) =&gt; (\n            {v === 0 ? \"0\" : (v / 1000) + \"K\"}\n          ))}\n        \n        {/* Chart area */}\n        \n setHov(null)}&gt;\n          \n            {yTicks.map((v, i) =&gt; )}\n            {hov &amp;&amp; }\n            {visible.map(s =&gt; )}\n          \n          {visible.map(s =&gt; s.pts.map((v, i) =&gt; {\n            const isHov = hov &amp;&amp; hov.s.key === s.key &amp;&amp; hov.i === i, dim = hov &amp;&amp; !isHov;\n            return (\n              \n setHov({ s, i })}\n                style={{ position: \"absolute\", left: `${xPct(i)}%`, top: `${yPct(v)}%`, transform: \"translate(-50%, -50%)\", width: 20, height: 20, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", cursor: \"pointer\", zIndex: isHov ? 4 : 2 }}&gt;\n                \n              \n            );\n          }))}\n          {hov &amp;&amp; (\n            \n n - 4 ? \"calc(-100% - 12px)\" : hov.i &lt; 3 ? \"12px\" : \"-50%\"}, calc(-100% - 14px))`, background: T.surface, border: `1px solid ${T.line}`, borderRadius: 10, boxShadow: T.shadow, padding: \"9px 12px\", whiteSpace: \"nowrap\", pointerEvents: \"none\", zIndex: 6 }}&gt;\n              \n{hov.s.label}\n              \n{fmt(hov.s.pts[hov.i])}\n              {hov.i &gt; 0 &amp;&amp; (() =&gt; { const pct = (hov.s.pts[hov.i] - hov.s.pts[hov.i - 1]) / hov.s.pts[hov.i - 1] * 100; const up = pct &gt;= 0; return \n{up ?  : }{up ? \"+\" : \"\"}{pct.toFixed(1)}% from prev; })()}\n              \n{LINE_LABELS[hov.i]}\n            \n          )}\n        \n      \n      {/* X-axis labels */}\n      \n\n        {LINE_LABELS.map((label, i) =&gt; (\n          \n{i % 3 === 0 ? label : \"\"}\n        ))}\n      \n      \n\n        {LINE_SERIES.map(s =&gt; {\n          const isOff = off.has(s.key);\n          return (\n             toggle(s.key)} title={isOff ? \"Show series\" : \"Hide series\"} className=\"ax-press\"\n              style={{ display: \"inline-flex\", alignItems: \"center\", gap: 6, padding: \"3px 9px\", borderRadius: 999, border: `1px solid ${isOff ? T.lineSoft : T.line}`, background: isOff ? \"transparent\" : T.canvas, cursor: \"pointer\", fontFamily: T.font, fontSize: 11.5, fontWeight: 500, color: isOff ? T.faint : T.body, transition: \"all .14s\" }}&gt;\n              \n              {s.label}\n            \n          );\n        })}\n      \n    \n  );\n}\nconst STACK_DATA = [[\"Jan\", 40, 25, 20], [\"Feb\", 35, 30, 15], [\"Mar\", 52, 22, 26], [\"Apr\", 30, 35, 18], [\"May\", 48, 28, 24], [\"Jun\", 58, 32, 28]];\nconst STACK_SERIES = [\n  { key: \"cloud\", label: \"Cloud\", color: T.viz.green },\n  { key: \"onprem\", label: \"On-prem\", color: T.viz.mint },\n  { key: \"saas\", label: \"SaaS\", color: T.viz.lilac },\n];\nfunction StackedBody() {\n  const [off, setOff] = useState(() =&gt; new Set());\n  const [segHov, setSegHov] = useState(null);\n  const [tip, setTip] = useState(null);\n  const toggle = (key) =&gt; setOff(s =&gt; { const n = new Set(s); n.has(key) ? n.delete(key) : n.add(key); return n; });\n  const visSeries = STACK_SERIES.filter(s =&gt; !off.has(s.key));\n  const yAxisW = 34;\n  const allTotals = STACK_DATA.map(row =&gt; visSeries.reduce((sum, s) =&gt; sum + row[STACK_SERIES.findIndex(s2 =&gt; s2.key === s.key) + 1], 0));\n  const rawMax = Math.max(...allTotals, 1);\n  const yMax = Math.ceil(rawMax / 20) * 20;\n  const yTicks = [yMax, yMax * 0.75, yMax * 0.5, yMax * 0.25, 0];\n  const tipContent = tip &amp;&amp; segHov ? (() =&gt; {\n    const row = STACK_DATA[segHov.col];\n    const s = STACK_SERIES.find(s =&gt; s.key === segHov.key);\n    const idx = STACK_SERIES.findIndex(s2 =&gt; s2.key === segHov.key);\n    const val = row[idx + 1] * 86;\n    const totalVis = visSeries.reduce((sum, ss) =&gt; sum + row[STACK_SERIES.findIndex(s2 =&gt; s2.key === ss.key) + 1], 0);\n    const pct = (row[idx + 1] / (totalVis || 1) * 100).toFixed(1);\n    return { label: s.label, color: s.color, val, pct, month: row[0] };\n  })() : null;\n  return (\n    \n\n      {tip &amp;&amp; tipContent &amp;&amp; \n        \n{tipContent.month}\n        \n{tipContent.label}\n        \n{fmt(tipContent.val)}\n        \n{tipContent.pct}% of total\n      }\n      \n\n        {/* Y-axis */}\n        \n\n          {yTicks.map((v, i) =&gt; (\n            {v === 0 ? \"0\" : v + \"K\"}\n          ))}\n        \n        {/* Bars */}\n        \n\n          \n\n            {yTicks.map((v, i) =&gt; (\n              \n\n            ))}\n            {STACK_DATA.map((row, ci) =&gt; {\n              const total = visSeries.reduce((sum, s) =&gt; sum + row[STACK_SERIES.findIndex(s2 =&gt; s2.key === s.key) + 1], 0);\n              const colHov = segHov?.col === ci;\n              const dim = segHov &amp;&amp; !colHov;\n              return (\n                \n\n                  \n\n                    {visSeries.map((s, si) =&gt; {\n                      const val = row[STACK_SERIES.findIndex(s2 =&gt; s2.key === s.key) + 1];\n                      const isFirst = si === 0, isLast = si === visSeries.length - 1;\n                      const isHov = segHov?.col === ci &amp;&amp; segHov?.key === s.key;\n                      return (\n                        \n { setSegHov({ col: ci, key: s.key }); setTip({ x: e.clientX, y: e.clientY }); }}\n                          onMouseMove={(e) =&gt; setTip({ x: e.clientX, y: e.clientY })}\n                          onMouseLeave={() =&gt; { setSegHov(null); setTip(null); }}\n                          style={{ flex: val, background: s.color, borderRadius: isFirst ? \"6px 6px 0 0\" : isLast ? \"0 0 6px 6px\" : 0, filter: isHov ? \"brightness(1.18)\" : \"none\", transition: \"filter .15s\", cursor: \"pointer\" }} /&gt;\n                      );\n                    })}\n                  \n                  {row[0]}\n                \n              );\n            })}\n          \n        \n      \n      {/* Clickable legend */}\n      \n\n        {STACK_SERIES.map(s =&gt; {\n          const isOff = off.has(s.key);\n          return (\n             toggle(s.key)} className=\"ax-press\"\n              style={{ display: \"inline-flex\", alignItems: \"center\", gap: 6, padding: \"3px 9px\", borderRadius: 999, border: `1px solid ${isOff ? T.lineSoft : T.line}`, background: isOff ? \"transparent\" : T.canvas, cursor: \"pointer\", fontFamily: T.font, fontSize: 11.5, fontWeight: 500, color: isOff ? T.faint : T.body, transition: \"all .14s\" }}&gt;\n              \n              {s.label}\n            \n          );\n        })}\n      \n    \n  );\n}\nconst SEV = [[\"Critical\", 142, 100, SEVC.critical], [\"High\", 98, 70, SEVC.high], [\"Medium\", 76, 54, SEVC.medium], [\"Low\", 45, 32, SEVC.low], [\"Info\", 21, 15, SEVC.info]];\nconst SEV_ASSETS = {\n  Critical: [[\"PC-CURTIS-WILLIAMS\", \"CVE-2024-21412 \u00b7 SmartScreen bypass\"], [\"srv-db-fin-04\", \"CVE-2024-3094 \u00b7 xz-utils backdoor\"], [\"esx-infranginx-5567897\", \"CVE-2023-46604 \u00b7 ActiveMQ RCE\"], [\"WIN-RUTHD\", \"CVE-2024-21413 \u00b7 Outlook RCE\"]],\n  High: [[\"macbook-pro-jdoe\", \"CVE-2024-23222 \u00b7 WebKit type confusion\"], [\"azure-infra9274676\", \"CVE-2024-21401 \u00b7 Entra ID elevation\"], [\"lablb-2918146-beta\", \"CVE-2024-1709 \u00b7 ScreenConnect auth bypass\"]],\n  Medium: [[\"iphone-asmith\", \"CVE-2024-23225 \u00b7 kernel memory\"], [\"sepio-external3026786\", \"CVE-2024-0519 \u00b7 V8 out-of-bounds\"]],\n  Low: [[\"android-pixel-7\", \"CVE-2024-0039 \u00b7 System component\"]],\n  Info: [[\"win-marychasse\", \"Informational \u00b7 TLS 1.0 enabled\"]],\n};\nfunction SeverityDrawer({ sev, close }) {\n  const list = SEV_ASSETS[sev[0]] || [];\n  return createPortal(&lt;&gt;\n    \n\n    \n\n      \n\n        \n        \n\n          \n{sev[0]} severity\n          \n{sev[1]} open vulnerabilities \u00b7 {list.length} assets shown\n        \n        \n      \n      \n\n        {list.map(([host, cve], i) =&gt; (\n          \n\n            \n\n              {host}\n              {sev[0]}\n            \n            {cve}\n          \n        ))}\n      \n      \n\n        View all {sev[1]} in Inventory\n      \n    \n  , document.body);\n}\nfunction SeverityBody() {\n  const [hi, setHi] = useState(null);\n  const [drill, setDrill] = useState(null);\n  const [tip, setTip] = useState(null);\n  const sevTotal = SEV.reduce((a, b) =&gt; a + b[1], 0);\n  return (&lt;&gt;\n    \n\n      {SEV.map((b, i) =&gt; {\n        const active = hi === i, dim = hi !== null &amp;&amp; !active;\n        return (\n          \n setDrill(b)} onMouseEnter={(e) =&gt; { setHi(i); setTip({ i, x: e.clientX, y: e.clientY }); }} onMouseMove={(e) =&gt; setTip({ i, x: e.clientX, y: e.clientY })} onMouseLeave={() =&gt; { setHi(null); setTip(null); }}\n            style={{ display: \"flex\", alignItems: \"center\", gap: 12, opacity: dim ? 0.5 : 1, transition: \"opacity .15s\", cursor: \"pointer\" }}&gt;\n            {b[0]}\n            \n\n\n            {active ? b[1] + \" open\" : b[1]}\n          \n        );\n      })}\n    \n    {tip &amp;&amp; \n{SEV[tip.i][0]}\n{fmt(SEV[tip.i][1])}\n{Math.round(SEV[tip.i][1] / sevTotal * 100)}% of open findings}\n    {drill &amp;&amp;  setDrill(null)} /&gt;}\n  );\n}\nconst ST_COLOR = { ok: T.viz.green, warn: T.viz.amber, err: T.red };\n\n/* ===== System Lifecycle (discovery cycle) ===== */\nconst LIFECYCLE = [\n  { name: \"Fetch\", pct: 100 }, { name: \"Clean\", pct: 100 }, { name: \"Correlate\", pct: 100 },\n  { name: \"Enrich\", pct: 78 }, { name: \"Calculate\", pct: 0 },\n];\nfunction LifecycleBody() {\n  const [tip, setTip] = useState(null);\n  const done = LIFECYCLE.filter(s =&gt; s.pct === 100).length, total = LIFECYCLE.length;\n  const overall = Math.round(LIFECYCLE.reduce((a, s) =&gt; a + s.pct, 0) / total);\n  const r = 42, sw = 11, C = 2 * Math.PI * r, dash = (overall / 100) * C;\n  return (\n    \n\n      {tip &amp;&amp; \n{LIFECYCLE[tip.i].name} stage\n{LIFECYCLE[tip.i].pct &gt; 0 ? LIFECYCLE[tip.i].pct + \"% complete\" : \"Not started\"}}\n      \n\n        \n\n          \n            \n            \n          \n          \n\n            {done}/{total}\n            Stages\n          \n        \n        \n\n          {LIFECYCLE.map((s, i) =&gt; {\n            const c = s.pct === 100 ? T.viz.green : s.pct &gt; 0 ? T.blue : T.bg40;\n            return (\n              \n setTip({ i, x: e.clientX, y: e.clientY })} onMouseMove={(e) =&gt; setTip({ i, x: e.clientX, y: e.clientY })} onMouseLeave={() =&gt; setTip(null)} style={{ display: \"flex\", alignItems: \"center\", gap: 10, cursor: \"default\" }}&gt;\n                {s.name}\n                \n\n                  \n\n                \n                 0 ? T.blue : T.bg40, ...tnum }}&gt;{s.pct &gt; 0 ? s.pct + \"%\" : \"\u2014\"}\n              \n            );\n          })}\n        \n      \n      \n\n        {[[\"Cycle started\", \"09:00:04\"], [\"Duration\", \"00:42:18\"], [\"Next cycle\", \"13:17:42\"]].map(([k, v], i) =&gt; (\n          \n\n            \n{k}\n            \n{v}\n          \n        ))}\n      \n    \n  );\n}\n\n/* ===== Discovery Log ===== */\nconst DISC_PHASES = [[\"Fetch\", T.viz.green], [\"Clean\", T.viz.mint], [\"Correlate\", T.viz.lilac], [\"Enrich\", T.viz.lilacPale], [\"Calculate\", T.viz.amber], [\"Save\", T.viz.orange]];\nconst DISCOVERY = [\n  { started: \"Jun 15, 09:00\", completed: \"Jun 15, 09:35\", duration: \"35min 22sec\", ph: [40, 12, 18, 10, 12, 8] },\n  { started: \"Jun 14, 09:00\", completed: \"Jun 14, 09:35\", duration: \"35min 59sec\", ph: [38, 14, 17, 11, 12, 8] },\n  { started: \"Jun 13, 09:00\", completed: \"Jun 13, 09:35\", duration: \"35min 29sec\", ph: [41, 11, 18, 10, 12, 8] },\n  { started: \"Jun 12, 09:00\", completed: \"Jun 12, 09:35\", duration: \"35min 11sec\", ph: [39, 13, 17, 11, 12, 8] },\n  { started: \"Jun 11, 09:00\", completed: \"Jun 11, 09:35\", duration: \"35min 58sec\", ph: [44, 12, 16, 9, 11, 8] },\n  { started: \"Jun 10, 09:00\", completed: \"Jun 10, 09:30\", duration: \"30min 54sec\", ph: [36, 12, 18, 12, 14, 8] },\n  { started: \"Jun 9, 09:00\", completed: \"Jun 9, 09:34\", duration: \"34min 02sec\", ph: [37, 13, 17, 11, 13, 9] },\n  { started: \"Jun 8, 09:00\", completed: \"Jun 8, 09:31\", duration: \"31min 38sec\", ph: [40, 12, 17, 10, 13, 8] },\n];\nfunction DiscoveryBody() {\n  const [hi, setHi] = useState(null);\n  const [tip, setTip] = useState(null);\n  const cols = \"minmax(70px, 1.6fr) 104px 92px\";\n  const durToSec = (s) =&gt; { let t = 0; const m = s.match(/(\\d+)\\s*min/), sec = s.match(/(\\d+)\\s*sec/); if (m) t += +m[1] * 60; if (sec) t += +sec[1]; return t; };\n  const fmtDur = (x) =&gt; { x = Math.round(x); const m = Math.floor(x / 60), s = x % 60; return m &gt; 0 ? `${m}min ${s}sec` : `${s}sec`; };\n  return (\n    \n\n      \n\n        {[\"Latest Discoveries\", \"Started\", \"Duration\"].map((c, i) =&gt; (\n          {c}\n        ))}\n      \n      \n\n        {DISCOVERY.map((d, i) =&gt; (\n          \n setHi(i)} onMouseLeave={() =&gt; { setHi(null); setTip(null); }}\n            style={{ display: \"grid\", gridTemplateColumns: cols, gap: 12, alignItems: \"center\", padding: \"7px 6px\", borderBottom: i &lt; DISCOVERY.length - 1 ? `1px solid ${T.hair}` : \"none\", background: hi === i ? T.canvas : \"transparent\", borderRadius: 6, transition: \"background .12s\" }}&gt;\n            \n\n              {d.ph.map((w, j) =&gt;  setTip({ d, j, x: e.clientX, y: e.clientY })} onMouseMove={(e) =&gt; setTip({ d, j, x: e.clientX, y: e.clientY })}\n                style={{ width: `${w}%`, height: \"100%\", background: DISC_PHASES[j][1], cursor: \"pointer\" }} /&gt;)}\n            \n            {d.started}\n            {d.duration}\n          \n        ))}\n      \n      {tip &amp;&amp; \n        \n{DISC_PHASES[tip.j][0]}\n        \n{fmtDur(durToSec(tip.d.duration) * tip.d.ph[tip.j] / 100)}\n        \n{tip.d.ph[tip.j]}% of cycle\n      }\n    \n  );\n}\n\n/* ===== Adapter Connections (status + logo coin + preview) ===== */\nconst ADAPTER_CONN = [\n  { brand: \"crowdstrike\", name: \"CrowdStrike\", st: \"ok\", desc: \"9,120 devices \u00b7 synced 4m ago\" },\n  { brand: \"aws\", name: \"Amazon Web Services\", st: \"ok\", desc: \"12,400 assets \u00b7 synced 6m ago\" },\n  { brand: \"azure\", name: \"Microsoft Azure\", st: \"ok\", desc: \"22,097 assets \u00b7 synced 5m ago\" },\n  { brand: \"okta\", name: \"Okta\", st: \"ok\", desc: \"9,870 users \u00b7 synced 8m ago\" },\n  { short: \"Jm\", color: \"#3B3B3B\", name: \"Jamf Pro\", st: \"err\", desc: \"Connection timeout \u2014 check credentials\" },\n  { short: \"now\", color: \"#2E8B57\", name: \"ServiceNow\", st: \"warn\", desc: \"Rate limited \u00b7 retrying\" },\n  { brand: \"googlecloud\", name: \"Google Cloud\", st: \"ok\", desc: \"9,055 assets \u00b7 synced 7m ago\" },\n  { brand: \"vmware\", name: \"VMware vCenter\", st: \"ok\", desc: \"4,310 VMs \u00b7 synced 11m ago\" },\n];\nconst ST_LABEL = { ok: \"Connected\", warn: \"Degraded\", err: \"Error\" };\nfunction AdapterCoin({ a }) {\n  if (a.brand) return ;\n  return {a.short};\n}\nfunction AdaptersBody() {\n  const connected = ADAPTER_CONN.filter(a =&gt; a.st === \"ok\").length;\n  const attention = ADAPTER_CONN.length - connected;\n  return (\n    \n\n      \n\n        {connected}\n        connected sources\n        {attention &gt; 0 &amp;&amp; {attention} need attention}\n      \n      \n\n        {ADAPTER_CONN.map((a, i) =&gt; {\n          const ring = ST_COLOR[a.st];\n          return (\n            \n\n              \n              \n\n                \n{a.name}\n                \n\n                  \n                  {a.desc}\n                \n              \n            \n          );\n        })}\n      \n    \n  );\n}\nconst HEALTH_OK_BRANDS = [\"crowdstrike\", \"aws\", \"azure\", \"okta\", \"googlecloud\", \"vmware\"];\nfunction HealthOkBody() {\n  return (\n    \n\n      \n\n        33\n        adapters syncing successfully\n      \n      \n\n        {HEALTH_OK_BRANDS.map((b, i) =&gt; )}\n        +27\n      \n      \n\n         100% healthy \u00b7 last full sync 4m ago\n      \n    \n  );\n}\nconst HEALTH_FAIL = [\n  { short: \"Jm\", color: \"#3B3B3B\", name: \"Jamf Pro\", reason: \"Connection timeout \u2014 check credentials\" },\n  { short: \"now\", color: \"#2E8B57\", name: \"ServiceNow\", reason: \"Rate limited \u00b7 retrying\" },\n];\nfunction HealthFailBody() {\n  return (\n    \n\n      \n\n        {HEALTH_FAIL.length}\n        adapters need attention\n      \n      \n\n        {HEALTH_FAIL.map((a, i) =&gt; (\n          \n\n            {a.short}\n            \n\n              \n{a.name}\n              \n{a.reason}\n            \n            Fix\n          \n        ))}\n      \n    \n  );\n}\n/* ===== Cost Optimization dashboard ===== */\nconst fmtMoney = (n) =&gt; n.toLocaleString(\"en-US\");\nfunction CostKPI({ value, unit }) {\n  return (\n    \n\n      {value}\n      {unit &amp;&amp; {unit}}\n    \n  );\n}\nfunction HBarList({ rows, accent, prefix, avatar, appLogo }) {\n  const max = Math.max(...rows.map(r =&gt; r[1]), 1);\n  const totalVal = rows.reduce((a, r) =&gt; a + r[1], 0) || 1;\n  const [tip, setTip] = useState(null);\n  return (\n    \n\n      {rows.map(([label, val], i) =&gt; {\n        const pct = Math.max(4, (val / max) * 100), inside = pct &gt; 24;\n        return (\n          \n setTip({ i, x: e.clientX, y: e.clientY })} onMouseMove={(e) =&gt; setTip({ i, x: e.clientX, y: e.clientY })} onMouseLeave={() =&gt; setTip(null)}\n            style={{ display: \"flex\", alignItems: \"center\", gap: 12, cursor: \"default\" }}&gt;\n            {avatar &amp;&amp; }{appLogo &amp;&amp; }{label}\n            \n\n              \n\n                {inside &amp;&amp; {prefix || \"\"}{fmtMoney(val)}}\n              \n              {!inside &amp;&amp; {prefix || \"\"}{fmtMoney(val)}}\n            \n          \n        );\n      })}\n      {tip &amp;&amp; \n        \n{rows[tip.i][0]}\n        \n{prefix || \"\"}{fmtMoney(rows[tip.i][1])}\n        \n{(rows[tip.i][1] / totalVal * 100).toFixed(1)}% of shown total\n      }\n    \n  );\n}\nconst COST_CATEGORY = [[\"Productivity\", 141993], [\"Video Conference\", 55928], [\"File Sharing\", 52943], [\"Authentication\", 11440], [\"CRM\", 9870]];\nconst COST_APP = [[\"Zoom\", 55928], [\"Miro\", 52885], [\"Dropbox\", 50431], [\"Salesforce\", 43176], [\"Slack\", 38420]];\nconst COST_TOPLIC = [[\"Zoom One Pro\", 70800], [\"Google WS Ent. Starter\", 27450], [\"Google WS Ent. Standard\", 12985], [\"Google WS Business\", 8640], [\"Microsoft 365 G3 GCC\", 1930]];\nconst COST_USAGE = [[\"aaron.church@demo.local\", 29], [\"aaron.daniels@demo.local\", 29], [\"ada.pires@demo.local\", 29], [\"adelaide.gercak@demo.local\", 29], [\"adrian.williams@demo.local\", 29]];\nconst COST_RENEWALS = [\n  { app: \"Office365\", name: \"Microsoft 365 E5\", date: \"2026-07-06\", cost: \"3,175.50\", term: \"Yearly\", unit: \"54.75\" },\n  { app: \"Office365\", name: \"Microsoft Power Aut\u2026\", date: \"2026-08-07\", cost: \"6,518.75\", term: \"Yearly\", unit: \"37.25\" },\n];\nfunction CostExpAllBody() { return ; }\nfunction CostLicAllBody() { return ; }\nfunction CostExp2024Body() { return ; }\nfunction CostLicTotalBody() { return ; }\nfunction CostCategoryBody() { return ; }\nfunction CostAppBody() { return ; }\nfunction CostTopLicBody() { return ; }\nfunction CostUsageBody() { return ; }\nfunction CostRenewalsBody() {\n  const cols = [\n    { label: \"Application\", render: r =&gt; {r.app} },\n    { label: \"Name\", render: r =&gt; {r.name} },\n    { label: \"Renewal Date\", render: r =&gt; {r.date} },\n    { label: \"Total Cost\", align: \"right\", render: r =&gt; ${r.cost} },\n    { label: \"Term\", render: r =&gt; {r.term} },\n    { label: \"Unit\", align: \"right\", render: r =&gt; ${r.unit} },\n  ];\n  return (\n    \n\n      \n\n        \n          \n            {cols.map((c, i) =&gt; {c.label})}\n          \n        \n        \n          {COST_RENEWALS.map((r, ri) =&gt; (\n            \n              {cols.map((c, i) =&gt; {c.render(r)})}\n            \n          ))}\n        \n      \n    \n  );\n}\nfunction ResetViewBtn({ disabled, onReset }) {\n  const [h, setH] = useState(false);\n  return (\n     setH(true)} onMouseLeave={() =&gt; setH(false)}\n      title={disabled ? \"Layout is at its default\" : \"Restore the default tile layout\"}\n      style={{ display: \"inline-flex\", alignItems: \"center\", gap: 6, height: 30, padding: \"0 13px\", borderRadius: 999, fontFamily: T.font, fontSize: 13, fontWeight: 600, cursor: disabled ? \"default\" : \"pointer\", border: `1px solid ${disabled ? T.lineSoft : h ? T.lineStrong : T.line}`, background: disabled ? \"transparent\" : h ? T.surface2 : T.control, color: disabled ? T.faint : T.body, transition: \"all .14s\" }}&gt;\n       Reset view\n    \n  );\n}\n\nconst TILE_META = {\n  line: { eyebrow: \"Activity\", title: \"Device Discovery Over Time\", Body: LineBody },\n  donut: { eyebrow: \"Composition\", title: \"Windows Distribution\", Body: DonutBody },\n  lifecycle: { eyebrow: \"Pipeline\", title: \"System Lifecycle\", Body: LifecycleBody },\n  discovery: { eyebrow: \"Activity\", title: \"Discovery Log\", Body: DiscoveryBody },\n  adapters: { eyebrow: \"Connections\", title: \"Adapter Connections\", Body: AdaptersBody },\n  stacked: { eyebrow: \"Trend\", title: \"Asset Growth by Category\", Body: StackedBody, footer: 12.4% },\n  severity: { eyebrow: \"Risk\", title: \"Vulnerabilities by Severity\", Body: SeverityBody, footer: 18 resolved },\n  healthOk: { eyebrow: \"Adapters\", title: \"Adapter Health \u00b7 Successful\", Body: HealthOkBody },\n  healthFail: { eyebrow: \"Adapters\", title: \"Adapter Health \u00b7 Attention\", Body: HealthFailBody },\n  costExpAll: { eyebrow: \"Spend\", title: \"Total Expenses (All Time)\", Body: CostExpAllBody },\n  costExp2024: { eyebrow: \"Spend\", title: \"Total Expenses (2024)\", Body: CostExp2024Body },\n  costLicAll: { eyebrow: \"Licenses\", title: \"Total License Cost (All Time)\", Body: CostLicAllBody },\n  costLicTotal: { eyebrow: \"Licenses\", title: \"Total License Cost\", Body: CostLicTotalBody },\n  costRenewals: { eyebrow: \"Renewals\", title: \"Upcoming Renewals (next 90 days)\", Body: CostRenewalsBody, footer: View all results, noPad: true },\n  costCategory: { eyebrow: \"Spend\", title: \"Expenses by Category (2024)\", Body: CostCategoryBody },\n  costApp: { eyebrow: \"Spend\", title: \"Expenses by App (2024)\", Body: CostAppBody },\n  costTopLic: { eyebrow: \"Licenses\", title: \"Most Expensive Licenses (2024)\", Body: CostTopLicBody },\n  costUsage: { eyebrow: \"Usage\", title: \"Azure AD Logons \u00b7 last 30 days\", Body: CostUsageBody },\n};\n\n/* ============ resizable grid (corner drag, neighbors reflow) ============ */\nconst GRID_COLS = 12, ROW_UNIT = 40, GAP = 16;\nconst INITIAL_TILES = [\n  { id: \"line\", w: 8, h: 7 }, { id: \"donut\", w: 4, h: 7 },\n  { id: \"lifecycle\", w: 5, h: 7 }, { id: \"discovery\", w: 7, h: 7 },\n  { id: \"adapters\", w: 7, h: 6 }, { id: \"severity\", w: 5, h: 6 },\n  { id: \"healthOk\", w: 6, h: 5 }, { id: \"healthFail\", w: 6, h: 5 },\n  { id: \"stacked\", w: 12, h: 5 },\n];\nconst COST_TILES = [\n  { id: \"costExpAll\", w: 3, h: 4 }, { id: \"costExp2024\", w: 3, h: 4 }, { id: \"costLicAll\", w: 3, h: 4 }, { id: \"costLicTotal\", w: 3, h: 4 },\n  { id: \"costRenewals\", w: 12, h: 6 },\n  { id: \"costCategory\", w: 6, h: 6 }, { id: \"costApp\", w: 6, h: 6 },\n  { id: \"costTopLic\", w: 6, h: 6 }, { id: \"costUsage\", w: 6, h: 6 },\n];\nconst DASH_TILESETS = { \"Cost Optimization\": COST_TILES };\nfunction DashboardGrid({ tileSet = INITIAL_TILES }) {\n  const [tiles, setTiles] = useState(tileSet);\n  const [hoverId, setHoverId] = useState(null);\n  const [resizingId, setResizingId] = useState(null);\n  const [drag, setDrag] = useState(null);\n  const dragId = drag ? drag.id : null;\n  const ref = useRef(null);\n  const tileEls = useRef({});\n  const justDragged = useRef(false);\n\n  const startDrag = (e, id, immediate) =&gt; {\n    if (e.button || (e.target.closest &amp;&amp; (e.target.closest(\"[data-resize]\") || e.target.closest(\"button\")))) return;\n    const startX = e.clientX, startY = e.clientY;\n    let dragging = false;\n    const begin = (cx, cy) =&gt; {\n      const el = tileEls.current[id]; if (!el) return;\n      const rect = el.getBoundingClientRect();\n      dragging = true;\n      setDrag({ id, x: cx, y: cy, ox: cx - rect.left, oy: cy - rect.top, w: rect.width, h: rect.height });\n      document.body.style.userSelect = \"none\";\n    };\n    const timer = immediate ? null : setTimeout(() =&gt; begin(startX, startY), 300);\n    const onMove = (ev) =&gt; {\n      if (!dragging) {\n        const moved = Math.abs(ev.clientX - startX) &gt; (immediate ? 4 : 8) || Math.abs(ev.clientY - startY) &gt; (immediate ? 4 : 8);\n        if (!moved) return;\n        if (immediate) begin(ev.clientX, ev.clientY); else { end(); return; }\n        if (!dragging) return;\n      }\n      setDrag(d =&gt; d ? { ...d, x: ev.clientX, y: ev.clientY } : d);\n      for (const tid in tileEls.current) {\n        const el = tileEls.current[tid];\n        if (!el || tid === id) continue;\n        const r = el.getBoundingClientRect();\n        if (ev.clientX &gt;= r.left &amp;&amp; ev.clientX &lt;= r.right &amp;&amp; ev.clientY &gt;= r.top &amp;&amp; ev.clientY &lt;= r.bottom) {\n          setTiles(ts =&gt; { const from = ts.findIndex(x =&gt; x.id === id), to = ts.findIndex(x =&gt; x.id === tid); if (from &lt; 0 || to &lt; 0 || from === to) return ts; const n = ts.slice(); const [mv] = n.splice(from, 1); n.splice(to, 0, mv); return n; });\n          break;\n        }\n      }\n    };\n    const end = () =&gt; { clearTimeout(timer); if (dragging) { justDragged.current = true; setTimeout(() =&gt; { justDragged.current = false; }, 60); } dragging = false; setDrag(null); document.body.style.userSelect = \"\"; window.removeEventListener(\"pointermove\", onMove); window.removeEventListener(\"pointerup\", end); };\n    window.addEventListener(\"pointermove\", onMove); window.addEventListener(\"pointerup\", end);\n  };\n\n  const startResize = (e, id) =&gt; {\n    e.preventDefault(); e.stopPropagation();\n    setResizingId(id);\n    const rect = ref.current.getBoundingClientRect();\n    const colW = (rect.width - GAP * (GRID_COLS - 1)) / GRID_COLS;\n    const t = tiles.find(x =&gt; x.id === id);\n    const startWpx = t.w * colW + (t.w - 1) * GAP;\n    const startHpx = t.h * ROW_UNIT + (t.h - 1) * GAP;\n    const sx = e.clientX, sy = e.clientY;\n    const onMove = (ev) =&gt; {\n      let w = Math.round((startWpx + (ev.clientX - sx) + GAP) / (colW + GAP));\n      let h = Math.round((startHpx + (ev.clientY - sy) + GAP) / (ROW_UNIT + GAP));\n      w = Math.max(3, Math.min(GRID_COLS, w));\n      h = Math.max(4, Math.min(14, h));\n      setTiles(ts =&gt; ts.map(x =&gt; x.id === id ? { ...x, w, h } : x));\n    };\n    const onUp = () =&gt; { setResizingId(null); document.body.style.cursor = \"\"; window.removeEventListener(\"mousemove\", onMove); window.removeEventListener(\"mouseup\", onUp); };\n    document.body.style.cursor = \"nwse-resize\";\n    window.addEventListener(\"mousemove\", onMove); window.addEventListener(\"mouseup\", onUp);\n  };\n\n  const isDefault = JSON.stringify(tiles) === JSON.stringify(tileSet);\n  return (\n    &lt;&gt;\n      \n\n         setTiles(tileSet)} /&gt;\n      \n    \n\n      {tiles.map((t, ti) =&gt; {\n        const m = TILE_META[t.id];\n        const isHover = hoverId === t.id, isResizing = resizingId === t.id, isDragging = dragId === t.id, anyDrag = dragId !== null;\n        return (\n          \n (tileEls.current[t.id] = el)}\n            onPointerDown={(e) =&gt; startDrag(e, t.id)}\n            onClickCapture={(e) =&gt; { if (justDragged.current) { e.stopPropagation(); justDragged.current = false; } }}\n            onMouseEnter={() =&gt; setHoverId(t.id)} onMouseLeave={() =&gt; setHoverId(null)}\n            style={{ gridColumn: `span ${t.w}`, gridRow: `span ${t.h}`, position: \"relative\", minWidth: 0, zIndex: 1 }}&gt;\n            {isDragging ? (\n              \n\n            ) : (&lt;&gt;\n            \n\n              \n { e.stopPropagation(); startDrag(e, t.id, true); }} title=\"Drag to move\" style={{ padding: \"13px 20px 12px\", borderBottom: `1px solid ${T.hair}`, display: \"flex\", alignItems: \"center\", gap: 8, cursor: \"grab\" }}&gt;\n                \n\n                  \n{m.eyebrow}\n                  \n{m.title}\n                \n                \n              \n              \n\n              {m.footer &amp;&amp; \n{m.footer}}\n            \n            \n startResize(e, t.id)} data-resize title=\"Drag to resize\"\n              style={{ position: \"absolute\", right: 0, bottom: 0, width: 20, height: 20, cursor: \"nwse-resize\", display: \"flex\", alignItems: \"flex-end\", justifyContent: \"flex-end\", padding: 4, opacity: isHover || isResizing ? 1 : 0, transition: \"opacity .15s\" }}&gt;\n              \n            \n            )}\n          \n        );\n      })}\n    \n    {drag &amp;&amp; (() =&gt; { const m = TILE_META[drag.id]; return createPortal(\n      \n\n        \n\n          \n\n            \n\n              \n{m.eyebrow}\n              \n{m.title}\n            \n            \n          \n          \nDrop to reorder\n        \n      , document.body); })()}\n    \n  );\n}\n\n/* ============ Assets table view (real device schema) ============ */\nconst ADAPTERS = {\n  aws_adapter: { brand: \"aws\" }, active_directory_adapter: { brand: \"active_directory\" },\n  crowd_strike_adapter: { brand: \"crowdstrike\" }, google_mdm_adapter: { brand: \"googlecloud\" },\n  esx_adapter: { brand: \"vmware\" }, sentinelone_adapter: { brand: \"sentinelone\" },\n  service_now_adapter: { brand: \"service_now\" }, epo_adapter: { brand: \"epo\" },\n  paloalto_panorama_adapter: { brand: \"paloalto\" }, cisco_meraki_adapter: { brand: \"cisco_meraki\" },\n  cisco_ise_adapter: { brand: \"cisco_ise\" }, cisco_adapter: { brand: \"cisco\" },\n  tanium_adapter: { brand: \"tanium\" }, tanium_asset_adapter: { brand: \"tanium\" },\n  claroty_adapter: { brand: \"claroty\" }, counter_act_adapter: { brand: \"forescout\" },\n  tenable_security_center_adapter: { brand: \"tenable\" }, zoom_adapter: { brand: \"zoom\" },\n  checkpoint_r80_adapter: { brand: \"checkpoint\" }, cylance_adapter: { brand: \"cylance\" },\n  chef_adapter: { brand: \"chef\" }, axonius_network_inspector_adapter: { short: \"NP\", color: \"#1C1D1F\" },\n};\nfunction AdapterAvatar({ k, size = 32 }) {\n  const a = ADAPTERS[k] || { short: k.slice(0, 2).toUpperCase(), color: \"#939598\" };\n  if (a.brand) return ;\n  return \n 28 ? 11 : 9, fontWeight: 700, color: a.color }}&gt;{a.short};\n}\nfunction AdapterStack({ list }) {\n  const shown = list.slice(0, 3), extra = list.length - shown.length;\n  return (\n    \n      \n      {shown.map((k, i) =&gt; )}\n      {extra &gt; 0 &amp;&amp; +{extra}}\n    \n  );\n}\n/* OS category icons */\nfunction OsIcon({ os }) {\n  const c = { Windows: \"#0078D4\", Linux: \"#1C1D1F\", \"OS X\": \"#555\", iOS: \"#111\", Android: \"#3DDC84\", VMWare: \"#607078\" }[os] || T.faint;\n  const mc = T.isLight ? \"#1B2030\" : \"#D6DAE6\"; // monochrome marks adapt to theme\n  const g = {\n    Windows: ,\n    \"OS X\": ,\n    iOS: ,\n    Android: ,\n    Linux: ,\n    VMWare: vm,\n  }[os];\n  if (!os) return \u2014;\n  return {g || }{os};\n}\nconst DEVICES = [\n  { name: \"PC-CURTIS-WILLIAMS\", host: \"PC-CURTIS-WILLIAMS.demo.local\", os: \"Windows\", ip: \"10.0.49.148\", mac: \"88:53:2E:12:45:C4\", seen: \"2026-06-08 09:34\", tags: [\"Corporate\", \"Managed\"], adapters: [\"active_directory_adapter\", \"crowd_strike_adapter\", \"epo_adapter\", \"google_mdm_adapter\", \"tanium_adapter\", \"sentinelone_adapter\", \"cisco_ise_adapter\"] },\n  { name: \"infranginx-5567897-stg\", host: \"esx-infranginx-5567897-stg.demo.local\", os: \"Linux\", ip: \"10.0.63.107\", mac: \"00:0C:29:12:55:38\", seen: \"2026-06-08 11:43\", tags: [\"Staging\", \"Cloud\"], adapters: [\"cisco_ise_adapter\", \"claroty_adapter\", \"counter_act_adapter\", \"epo_adapter\", \"tanium_adapter\", \"esx_adapter\", \"aws_adapter\"] },\n  { name: \"WIN-RUTHD\", host: \"WIN-RUTHD.demo.local\", os: \"Windows\", ip: \"10.0.48.107\", mac: \"88:53:2E:12:44:9B\", seen: \"2026-06-08 13:18\", tags: [\"Corporate\"], adapters: [\"active_directory_adapter\", \"cisco_adapter\", \"crowd_strike_adapter\", \"cylance_adapter\", \"epo_adapter\", \"tanium_adapter\"] },\n  { name: \"external3026786-prd\", host: \"sepio-external3026786-prd.demo.local\", os: \"Linux\", ip: \"10.0.64.36\", mac: \"88:53:2E:12:56:12\", seen: \"2026-06-08 05:54\", tags: [\"Production\", \"Internet-facing\"], adapters: [\"checkpoint_r80_adapter\", \"chef_adapter\", \"epo_adapter\", \"paloalto_panorama_adapter\", \"axonius_network_inspector_adapter\", \"claroty_adapter\", \"tenable_security_center_adapter\"] },\n  { name: \"macbook-pro-jdoe\", host: \"macbook-pro-jdoe.demo.local\", os: \"OS X\", ip: \"10.0.51.22\", mac: \"A4:83:E7:9C:11:04\", seen: \"2026-06-08 12:02\", tags: [\"Endpoint\", \"BYOD\"], adapters: [\"google_mdm_adapter\", \"crowd_strike_adapter\", \"sentinelone_adapter\"] },\n  { name: \"lablb-2918146-beta\", host: \"esx-lablb-2918146-beta.manufacturing.com\", os: \"Linux\", ip: \"10.0.56.90\", mac: \"00:0C:29:12:4C:BF\", seen: \"2026-06-08 11:30\", tags: [\"Lab\"], adapters: [\"cisco_meraki_adapter\", \"claroty_adapter\", \"epo_adapter\", \"esx_adapter\", \"tanium_asset_adapter\", \"counter_act_adapter\", \"service_now_adapter\"] },\n  { name: \"iphone-asmith\", host: \"\u2014\", os: \"iOS\", ip: \"10.0.77.51\", mac: \"F0:18:98:22:7D:AA\", seen: \"2026-06-08 11:58\", tags: [\"Mobile\", \"BYOD\"], adapters: [\"google_mdm_adapter\", \"zoom_adapter\"] },\n  { name: \"srv-db-fin-04\", host: \"srv-db-fin-04.healthcare-subsidiary.com\", os: \"Linux\", ip: \"10.0.40.12\", mac: \"00:50:56:9A:3C:11\", seen: \"2026-06-08 07:12\", tags: [\"Production\", \"Database\", \"PCI\"], adapters: [\"service_now_adapter\", \"tenable_security_center_adapter\", \"tanium_adapter\", \"epo_adapter\", \"aws_adapter\", \"claroty_adapter\"] },\n  { name: \"azure-infra9274676-prd\", host: \"azure-infra9274676-prd.demo.local\", os: \"Windows\", ip: \"10.0.61.5\", mac: \"00:0D:3A:1F:8E:22\", seen: \"2026-06-08 10:47\", tags: [\"Production\", \"Cloud\"], adapters: [\"active_directory_adapter\", \"aws_adapter\", \"sentinelone_adapter\", \"service_now_adapter\"] },\n  { name: \"android-pixel-7\", host: \"\u2014\", os: \"Android\", ip: \"10.0.78.130\", mac: \"3C:28:6D:55:01:9F\", seen: \"2026-06-08 09:05\", tags: [\"Mobile\"], adapters: [\"google_mdm_adapter\"] },\n  { name: \"Win-MaryChasse\", host: \"WIN-MARYCHASSE.demo.local\", os: \"Windows\", ip: \"10.0.49.201\", mac: \"88:53:2E:12:48:7E\", seen: \"2026-06-07 22:41\", tags: [\"Corporate\"], adapters: [\"active_directory_adapter\", \"epo_adapter\", \"cisco_meraki_adapter\"] },\n  { name: \"esx-mail-2231-prd\", host: \"esx-mail-2231-prd.manufacturing.com\", os: \"VMWare\", ip: \"10.0.62.18\", mac: \"00:0C:29:44:1A:E0\", seen: \"2026-06-08 06:33\", tags: [\"Production\"], adapters: [\"esx_adapter\", \"tenable_security_center_adapter\", \"paloalto_panorama_adapter\"] },\n  { name: \"PC-Doris9920\", host: \"PC-DORIS9920.demo.local\", os: \"Windows\", ip: \"10.0.50.66\", mac: \"88:53:2E:12:51:C9\", seen: \"2026-06-08 08:59\", tags: [\"Corporate\", \"Managed\"], adapters: [\"active_directory_adapter\", \"crowd_strike_adapter\", \"tanium_adapter\", \"google_mdm_adapter\"] },\n  { name: \"kiosk-lobby-03\", host: \"kiosk-lobby-03.demo.local\", os: \"Linux\", ip: \"10.0.44.7\", mac: \"B8:27:EB:0C:5A:31\", seen: \"2026-06-07 19:20\", tags: [\"IoT\", \"Unmanaged\"], adapters: [\"counter_act_adapter\", \"claroty_adapter\"] },\n];\n\nconst INIT_COLS = [\n  { key: \"adapters\", label: \"Adapter Connections\", w: 230, pinned: false },\n  { key: \"name\", label: \"Asset Name\", w: 230, pinned: false },\n  { key: \"host\", label: \"Host Name\", w: 300, pinned: false },\n  { key: \"os\", label: \"OS Type\", w: 140, pinned: false },\n  { key: \"ip\", label: \"IP Address\", w: 140, pinned: false },\n  { key: \"mac\", label: \"MAC Address\", w: 160, pinned: false },\n  { key: \"seen\", label: \"Last Seen (UTC)\", w: 170, pinned: false },\n  { key: \"tags\", label: \"Tags\", w: 220, pinned: false },\n];\nconst CB_W = 46;\nconst mono = { fontFamily: \"ui-monospace, 'SF Mono', monospace\" };\nfunction cellContent(key, r) {\n  switch (key) {\n    case \"adapters\": return ;\n    case \"name\": return {r.name};\n    case \"host\": return {r.host};\n    case \"os\": return ;\n    case \"ip\": return {r.ip};\n    case \"mac\": return {r.mac};\n    case \"seen\": return {r.seen};\n    case \"tags\": return {r.tags.slice(0, 2).map((t, j) =&gt; )}{r.tags.length &gt; 2 &amp;&amp; +{r.tags.length - 2}};\n    default: return null;\n  }\n}\n\nfunction HeaderCell({ col, left, isLastPinned, onResize, onPin, onDragStart, regRef, dragging }) {\n  const [h, setH] = useState(false);\n  const sticky = col.pinned;\n  return (\n    \n regRef(col.key, el)} onPointerDown={(e) =&gt; onDragStart(e, col.key)} onMouseEnter={() =&gt; setH(true)} onMouseLeave={() =&gt; setH(false)}\n      style={{ width: col.w, flexShrink: 0, position: sticky ? \"sticky\" : \"relative\", left: sticky ? left : undefined, zIndex: sticky ? 4 : 1, background: T.canvas, height: 40, display: \"flex\", alignItems: \"center\", gap: 6, padding: \"0 12px\", boxShadow: isLastPinned ? \"2px 0 5px rgba(27,32,70,0.06)\" : \"none\", cursor: \"grab\", opacity: dragging ? 0.4 : 1 }}&gt;\n      {col.label}\n      {(h || col.pinned) &amp;&amp; (\n         onPin(col.key)} title={col.pinned ? \"Unpin column\" : \"Pin column\"}\n          style={{ width: 24, height: 24, borderRadius: 6, border: \"none\", cursor: \"pointer\", background: \"transparent\", color: col.pinned ? T.blue : T.faint, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", transform: col.pinned ? \"none\" : \"rotate(45deg)\", flexShrink: 0 }}&gt;\n          \n        \n      )}\n      \n onResize(e, col.key)} data-colresize title=\"Drag to resize\"\n        style={{ position: \"absolute\", right: -3, top: 8, width: 6, height: 24, cursor: \"col-resize\", display: \"flex\", justifyContent: \"center\", zIndex: 5 }}&gt;\n        \n      \n    \n  );\n}\n\nfunction AssetsTable() {\n  const [columns, setColumns] = useState(INIT_COLS);\n  const [hoverRow, setHoverRow] = useState(null);\n  const [perPage, setPerPage] = useState(20);\n  const [dragCol, setDragCol] = useState(null);\n  const colEls = useRef({});\n  const regRef = (k, el) =&gt; { colEls.current[k] = el; };\n\n  const startColDrag = (e, key) =&gt; {\n    if (e.button || (e.target.closest &amp;&amp; (e.target.closest(\"[data-colresize]\") || e.target.closest(\"button\")))) return;\n    const startX = e.clientX; let dragging = false;\n    const onMove = (ev) =&gt; {\n      if (!dragging) { if (Math.abs(ev.clientX - startX) &gt; 6) { dragging = true; setDragCol(key); document.body.style.userSelect = \"none\"; } else return; }\n      for (const k in colEls.current) {\n        const el = colEls.current[k]; if (!el || k === key) continue;\n        const r = el.getBoundingClientRect();\n        if (ev.clientX &gt;= r.left &amp;&amp; ev.clientX &lt;= r.right) {\n          setColumns(cs =&gt; { const from = cs.findIndex(c =&gt; c.key === key), to = cs.findIndex(c =&gt; c.key === k); if (from &lt; 0 || to &lt; 0 || from === to) return cs; const n = cs.slice(); const [m] = n.splice(from, 1); n.splice(to, 0, m); return n; });\n          break;\n        }\n      }\n    };\n    const onUp = () =&gt; { dragging = false; setDragCol(null); document.body.style.userSelect = \"\"; window.removeEventListener(\"pointermove\", onMove); window.removeEventListener(\"pointerup\", onUp); };\n    window.addEventListener(\"pointermove\", onMove); window.addEventListener(\"pointerup\", onUp);\n  };\n\n  const startColResize = (e, key) =&gt; {\n    e.preventDefault(); e.stopPropagation();\n    const sx = e.clientX, startW = columns.find(c =&gt; c.key === key).w;\n    const onMove = (ev) =&gt; { const w = Math.max(90, startW + (ev.clientX - sx)); setColumns(cs =&gt; cs.map(c =&gt; c.key === key ? { ...c, w } : c)); };\n    const onUp = () =&gt; { document.body.style.cursor = \"\"; window.removeEventListener(\"mousemove\", onMove); window.removeEventListener(\"mouseup\", onUp); };\n    document.body.style.cursor = \"col-resize\";\n    window.addEventListener(\"mousemove\", onMove); window.addEventListener(\"mouseup\", onUp);\n  };\n  const togglePin = (key) =&gt; setColumns(cs =&gt; cs.map(c =&gt; c.key === key ? { ...c, pinned: !c.pinned } : c));\n\n  const pinned = columns.filter(c =&gt; c.pinned), unpinned = columns.filter(c =&gt; !c.pinned);\n  const ordered = [...pinned, ...unpinned];\n  const leftMap = {}; let acc = CB_W;\n  pinned.forEach(c =&gt; { leftMap[c.key] = acc; acc += c.w; });\n  const lastPinned = pinned.length ? pinned[pinned.length - 1].key : null;\n  const totalW = CB_W + columns.reduce((a, c) =&gt; a + c.w, 0);\n\n  return (\n    \n\n      \n\n        \n\n          {/* header */}\n          \n\n            \n\n              \n            \n            {ordered.map(c =&gt; )}\n            \n\n          \n          {/* rows */}\n          {DEVICES.map((r, i) =&gt; {\n            const rowBg = hoverRow === i ? T.surface2 : T.surface;\n            return (\n              \n setHoverRow(i)} onMouseLeave={() =&gt; setHoverRow(null)}\n                style={{ display: \"flex\", height: 52, borderBottom: i &lt; DEVICES.length - 1 ? `1px solid ${T.hair}` : \"none\", background: rowBg }}&gt;\n                \n\n                  {hoverRow === i ?  : {i + 1}}\n                \n                {ordered.map(c =&gt; {\n                  const sticky = c.pinned;\n                  return (\n                    \n\n                      {cellContent(c.key, r)}\n                    \n                  );\n                })}\n                \n\n              \n            );\n          })}\n        \n      \n      {/* footer */}\n      \n\n        \n\n          Rows per page:\n           setPerPage(Number(e.target.value))}\n            style={{ height: 30, padding: \"0 28px 0 10px\", borderRadius: 999, border: `1px solid ${T.line}`, background: T.surface, color: T.ink, fontSize: 13, fontWeight: 500, fontFamily: T.font, cursor: \"pointer\", appearance: \"none\", WebkitAppearance: \"none\", backgroundImage: `url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%238494B5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E\")`, backgroundRepeat: \"no-repeat\", backgroundPosition: \"right 8px center\", outline: \"none\" }}&gt;\n            {[20, 50, 100].map(n =&gt; {n})}\n          \n        \n        \n\n          1\u2013{perPage} of 12,409\n          \n\n            \n            1234\n            \u2026621\n            \n          \n        \n      \n    \n  );\n}\n\nfunction QueryPill({ children, primary, active, onClick }) {\n  const [h, setH] = useState(false);\n  return  setH(true)} onMouseLeave={() =&gt; setH(false)} style={{ display: \"inline-flex\", alignItems: \"center\", gap: 6, height: 32, padding: \"0 14px\", borderRadius: 999, cursor: \"pointer\", fontFamily: T.font, fontSize: 13.5, fontWeight: 600, border: primary ? \"none\" : `1px solid ${active || h ? T.lineStrong : T.line}`, background: primary ? T.blue : active || h ? T.surface2 : T.control, color: primary ? T.onAccent : T.body }}&gt;{children};\n}\nfunction ToolLink({ icon: Icon, children }) {\n  const [h, setH] = useState(false);\n  return  setH(true)} onMouseLeave={() =&gt; setH(false)} style={{ display: \"inline-flex\", alignItems: \"center\", gap: 6, height: 30, padding: \"0 10px\", border: \"none\", borderRadius: 999, background: h ? T.surface2 : \"transparent\", color: T.body, fontSize: 13.5, fontWeight: 600, cursor: \"pointer\", fontFamily: T.font }}&gt;{Icon &amp;&amp; }{children};\n}\nfunction SegTool({ icon: Icon, title, first }) {\n  const [h, setH] = useState(false);\n  return (\n     setH(true)} onMouseLeave={() =&gt; setH(false)}&gt;\n      \n      {h &amp;&amp; {title}}\n    \n  );\n}\nfunction IconTool({ icon: Icon, title }) {\n  const [h, setH] = useState(false);\n  return (\n     setH(true)} onMouseLeave={() =&gt; setH(false)}&gt;\n      \n      {h &amp;&amp; {title}}\n    \n  );\n}\nfunction Segmented({ options, value, onChange }) {\n  const idx = Math.max(0, options.indexOf(value));\n  const wpct = 100 / options.length;\n  return (\n    \n\n      \n      {options.map(o =&gt; (\n         onChange(o)} style={{ position: \"relative\", zIndex: 1, minWidth: 62, padding: \"0 12px\", border: \"none\", background: \"transparent\", color: value === o ? T.onAccent : T.body, fontSize: 13.5, fontWeight: value === o ? 600 : 500, cursor: \"pointer\", fontFamily: T.font, transition: \"color .2s\" }}&gt;{o}\n      ))}\n    \n  );\n}\n\nfunction QueriesPanel({ close }) {\n  const recent = [\n    { nm: \"FH: 1.4 Asset Context.Business Importance\", sub: \"Shared Queries\" },\n    { nm: \"low Risk Score_2025-12-24T11-53\", sub: \"Public Queries / Predefined Queries\" },\n    { nm: \"Unmanaged endpoints seen &lt; 7d\", sub: \"Shared Queries\" },\n    { nm: \"Critical CVEs on internet-facing\", sub: \"Public Queries / Predefined Queries\" },\n  ];\n  return createPortal(&lt;&gt;\n    \n\n    \n\n      \n\n        Queries\n        \n        \n        \n      \n      \n\n        \n\n          \n        \n      \n      \n\n        \nFavorites\n        \nRecently Used Saved Queries\n        {recent.map((q, i) =&gt; (\n           (e.currentTarget.style.background = T.surface2)} onMouseLeave={(e) =&gt; (e.currentTarget.style.background = \"transparent\")}\n            style={{ display: \"flex\", alignItems: \"center\", gap: 11, width: \"100%\", border: \"none\", background: \"transparent\", borderRadius: 10, cursor: \"pointer\", padding: \"9px\", textAlign: \"left\", fontFamily: T.font }}&gt;\n            \n            \n              {q.nm}\n              {q.sub}\n            \n          \n        ))}\n      \n    \n  , document.body);\n}\nfunction AssetsView() {\n  const [mode, setMode] = useState(\"Wizard\");\n  const [enrichOpen, setEnrichOpen] = useState(false);\n  const [queriesOpen, setQueriesOpen] = useState(false);\n  return (\n    \n\n      \n\n      {/* breadcrumb + title + module actions */}\n      \n\n        \n\n          \nInventory / Assets\n          \nDevices\n        \n        \n\n          \n\n             setEnrichOpen(o =&gt; !o)}&gt;Enrichment &amp; Investigation \n            {enrichOpen &amp;&amp; (&lt;&gt;\n              \n setEnrichOpen(false)} style={{ position: \"fixed\", inset: 0, zIndex: 40 }} /&gt;\n              \n\n                {[\"Business Data Enrichment\", \"Device Inventory Classification\", \"Asset Investigation\"].map(o =&gt; (\n                   setEnrichOpen(false)} onMouseEnter={(e) =&gt; (e.currentTarget.style.background = T.surface2)} onMouseLeave={(e) =&gt; (e.currentTarget.style.background = \"transparent\")}\n                    style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", gap: 10, width: \"100%\", border: \"none\", background: \"transparent\", borderRadius: 8, cursor: \"pointer\", padding: \"9px 11px\", fontSize: 13, fontWeight: 500, fontFamily: T.font, color: T.body, textAlign: \"left\" }}&gt;\n                    {o} \n                  \n                ))}\n              \n            )}\n          \n          \n        \n      \n      {/* query toolbar */}\n      \n\n        New Query\n        Save As\n        Reset\n        Copy Query\n        \n\n        Display by Date\n        \n\n         setQueriesOpen(o =&gt; !o)}&gt;{queriesOpen ?  : &lt;&gt; Queries}\n        \n      \n      {/* search + wizard / basic filters */}\n      {mode === \"Wizard\" ? (\n        \n\n          \n\n            \n            \n          \n          Query Wizard\n        \n      ) : (\n        \n\n          \n          \n          \nLast Seen\n          \nTags\n           Filter\n        \n      )}\n      {/* stats toolbar */}\n      \n\n        Total 12,409\n         Last updated: 2026-06-08 17:07:59\n        \n\n        \n\n          \n\n            \n            \n            \n          \n           New Asset\n        \n      \n      {/* end flexShrink header */}\n      \n\n        \n      \n      {queriesOpen &amp;&amp;  setQueriesOpen(false)} /&gt;}\n    \n  );\n}\nfunction PageBtn({ children, active, disabled, wide }) {\n  const [h, setH] = useState(false);\n  return  setH(true)} onMouseLeave={() =&gt; setH(false)} style={{ minWidth: wide ? \"auto\" : 30, height: 30, padding: wide ? \"0 10px\" : 0, borderRadius: 999, border: active ? \"none\" : `1px solid ${h &amp;&amp; !disabled ? T.lineStrong : \"transparent\"}`, background: active ? T.blue : h &amp;&amp; !disabled ? T.surface2 : \"transparent\", color: active ? T.onAccent : disabled ? T.faint : T.body, fontSize: 13, fontWeight: 500, cursor: disabled ? \"default\" : \"pointer\", display: \"inline-flex\", alignItems: \"center\", justifyContent: \"center\", fontFamily: T.font, ...tnum }}&gt;{children};\n}\n\n/* ============ Inventory tree panel (assets view) ============ */\nconst INV_GROUPS_INIT = [\n  { name: \"Compute\", icon: Server, open: true, items: [\n    { icon: Server, label: \"Corporate Devices\", count: \"8,204\", fav: true },\n    { icon: ShieldAlert, label: \"Internet-facing Assets\", count: \"312\", fav: true },\n    { folder: \"Endpoint\", open: true, items: [\n      { icon: Server, label: \"Devices\", count: \"12,409\", active: true },\n      { icon: Workflow, label: \"Processes\", count: \"0\" },\n    ]},\n    { folder: \"Infrastructure\", open: false, items: [\n      { icon: Boxes, label: \"Compute Services\", count: \"14\" },\n      { icon: Cable, label: \"Databases\", count: \"36\" },\n      { icon: Boxes, label: \"Containers\", count: \"258\" },\n      { icon: Cable, label: \"Serverless Functions\", count: \"103\" },\n      { icon: Boxes, label: \"Compute Images\", count: \"25\" },\n    ]},\n    { icon: Settings, label: \"Configurations\", count: \"0\" },\n    { icon: Clock, label: \"Latest Devices\", count: \"12,409\" },\n  ] },\n  { name: \"Identity\", icon: Users, open: false, items: [\n    { folder: \"Directory\", open: false, items: [\n      { icon: Users, label: \"Users\", count: \"4,821\" },\n      { icon: Users, label: \"Groups\", count: \"312\" },\n    ]},\n    { icon: ShieldAlert, label: \"Service Accounts\", count: \"87\" },\n  ] },\n  { name: \"Applications\", icon: Layers, open: false, items: [\n    { icon: Layers, label: \"SaaS Apps\", count: \"143\" },\n    { icon: Layers, label: \"Installed Software\", count: \"2,904\" },\n  ] },\n  { name: \"Tickets\", icon: Bell, open: false, items: [\n    { icon: Bell, label: \"Open Tickets\", count: \"48\" },\n    { icon: Bell, label: \"Resolved\", count: \"203\" },\n  ] },\n];\nfunction InventoryPanel({ collapsed, setCollapsed }) {\n  const [groups, setGroups] = useState(INV_GROUPS_INIT);\n  const [favOpen, setFavOpen] = useState(true);\n\n  const collectItems = (items) =&gt; items.flatMap(it =&gt; it.folder ? collectItems(it.items) : [it]);\n  const favItems = groups.flatMap(g =&gt; collectItems(g.items)).filter(it =&gt; it.fav);\n\n  const toggleFavInItems = (items, label) =&gt; items.map(it =&gt;\n    it.folder ? { ...it, items: toggleFavInItems(it.items, label) }\n              : it.label === label ? { ...it, fav: !it.fav } : it\n  );\n  const toggleFav = (label) =&gt; setGroups(gs =&gt; gs.map(g =&gt; ({ ...g, items: toggleFavInItems(g.items, label) })));\n  const compute = groups.find(g =&gt; g.name === \"Compute\");\n  const computeLeafItems = compute ? compute.items.filter(it =&gt; !it.folder) : [];\n  return (\n    \n\n       setCollapsed(!collapsed)} title={collapsed ? \"Expand inventory\" : \"Collapse panel\"} className=\"ax-edge-collapse\"\n        style={{ position: \"absolute\", top: 16, right: -14, zIndex: 6, width: 28, height: 28, borderRadius: \"50%\", border: `1px solid ${T.line}`, background: T.surface, color: T.muted, cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", boxShadow: T.shadow }}&gt;\n        {collapsed ?  : }\n      \n      \n\n        {collapsed ? (\n          \n\n            \n\n              \n            \n            \n\n            {computeLeafItems.map((it, i) =&gt; {\n              const Icon = it.icon;\n              return (\n                \n\n                  \n                \n              );\n            })}\n          \n        ) : (\n          &lt;&gt;\n            \n\n              \n\n                \n              \n            \n            \n\n              \n\n                \n setFavOpen(o =&gt; !o)} style={{ display: \"flex\", alignItems: \"center\", gap: 9, padding: \"9px 8px\", cursor: \"pointer\", borderRadius: 8, color: T.body }}&gt;\n                  \n                  \n                  Favorites\n                  {favItems.length}\n                \n                {favOpen &amp;&amp; favItems.map((it, ii) =&gt; )}\n              \n              {groups.map((g, gi) =&gt; { const Icon = g.icon; return (\n                \n\n                  \n setGroups(gs =&gt; gs.map((x, i) =&gt; i === gi ? { ...x, open: !x.open } : x))}\n                    style={{ display: \"flex\", alignItems: \"center\", gap: 9, padding: \"9px 8px\", cursor: \"pointer\", borderRadius: 8, color: g.open ? T.accentText : T.body }}&gt;\n                    \n                    \n                    {g.name}\n                  \n                  {g.open &amp;&amp; g.items.map((it, ii) =&gt; it.folder ?  : )}\n                \n              ); })}\n            \n          \n        )}\n      \n    \n  );\n}\nfunction InvFolder({ folder, toggleFav }) {\n  const [open, setOpen] = useState(folder.open);\n  const [h, setH] = useState(false);\n  const FIcon = open ? FolderOpen : Folder;\n  return (\n    \n\n      \n setH(true)} onMouseLeave={() =&gt; setH(false)} onClick={() =&gt; setOpen(o =&gt; !o)}\n        style={{ display: \"flex\", alignItems: \"center\", gap: 8, height: 34, padding: \"0 8px 0 22px\", borderRadius: 8, cursor: \"pointer\", background: h ? T.surface2 : \"transparent\", transition: \"background .12s\" }}&gt;\n        \n        \n        {folder.folder}\n      \n      {open &amp;&amp; folder.items.map((it, i) =&gt; )}\n    \n  );\n}\nfunction InvRow({ icon: Icon, label, count, active, fav, indent, toggleFav }) {\n  const [h, setH] = useState(false);\n  const left = indent || 28;\n  return (\n    \n setH(true)} onMouseLeave={() =&gt; setH(false)}\n      style={{ position: \"relative\", display: \"flex\", alignItems: \"center\", gap: 11, height: 36, margin: \"1px 0\", padding: `0 8px 0 ${left}px`, borderRadius: 8, cursor: \"pointer\", background: active ? T.accentSoft : h ? T.surface2 : \"transparent\", transition: \"background .14s\" }}&gt;\n      \n      {label}\n      {(h || fav) &amp;&amp; toggleFav &amp;&amp; (\n         { e.stopPropagation(); toggleFav(label); }} title={fav ? \"Remove from favorites\" : \"Add to favorites\"} className=\"ax-star\"\n          style={{ width: 22, height: 22, borderRadius: 6, border: \"none\", background: \"transparent\", cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", padding: 0, flexShrink: 0 }}&gt;\n          \n        \n      )}\n      {!h &amp;&amp; !fav &amp;&amp; {count}}\n    \n  );\n}\n\n/* ============ chrome ============ */\nfunction AppHeader({ theme, setTheme }) {\n  return (\n    \n\n      \n\n        \n      \n      \n\n        \n\n          Search Axonius\n          \u2318K\n        \n      \n      \n\n        New navigation BETA\n         setTheme(theme === \"dark\" ? \"light\" : \"dark\")} title=\"Toggle light / dark\"&gt;{theme === \"dark\" ?  : }\n        \n        \nSB\n      \n    \n  );\n}\nfunction HBtn({ children, onClick, title }) {\n  const [h, setH] = useState(false);\n  return  setH(true)} onMouseLeave={() =&gt; setH(false)} style={{ width: 32, height: 32, borderRadius: 8, border: \"none\", cursor: \"pointer\", background: h ? T.surface2 : \"transparent\", color: h ? T.ink : T.bg80, display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}&gt;{children};\n}\n\nconst HICONS = {\n  dashboard: '',\n  inventory: '',\n  shield: '',\n  bolt: '',\n  link: '',\n  chart: '',\n  cog: '',\n};\nfunction HIcon({ name, size = 20, color = \"currentColor\", sw = 1.6, className }) {\n  return ${HICONS[name] || \"\"}` }} /&gt;;\n}\nconst RAIL = [\n  { key: \"dashboard\", hi: \"dashboard\", label: \"Dashboard\" }, { key: \"assets\", hi: \"inventory\", label: \"Inventory\" },\n  { key: \"exposures\", hi: \"shield\", label: \"Exposures\" }, { key: \"action\", hi: \"bolt\", label: \"Action Center\" },\n  { key: \"adapters\", hi: \"link\", label: \"Adapters\" }, { key: \"analysis\", hi: \"chart\", label: \"Analysis\" },\n];\nfunction IconRail({ view, setView }) {\n  return (\n    \n\n      {RAIL.map(r =&gt;  setView(r.key)} /&gt;)}\n      \n\n      \n\n    \n  );\n}\nfunction RailGlyph({ hi, label, active, onClick }) {\n  const [h, setH] = useState(false);\n  return (\n    \n setH(true)} onMouseLeave={() =&gt; setH(false)} title={label} className=\"ax-rail ax-press\"\n      style={{ position: \"relative\", width: 44, height: 44, borderRadius: 14, cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", background: active ? T.accentSoft : h ? T.surface2 : \"transparent\", transition: \"background .15s\" }}&gt;\n      \n    \n  );\n}\n\nconst DASH_TREE_INIT = [\n  { g: \"Favorites\", open: true, items: [\n    { nm: \"My Dashboard\", fav: true }, { nm: \"Asset Profile - Copy_2024-06-09\", fav: true },\n    { nm: \"Axonius Dashboard\", fav: true, active: true, def: true }, { nm: \"Cost Optimization\", fav: true }, { nm: \"Cloud Compliance\", fav: true },\n  ] },\n  { g: \"Public\", open: false, items: [\n    { folder: \"Security\", open: false, items: [{ nm: \"SecOps Overview\" }, { nm: \"Threat Intelligence\" }] },\n    { folder: \"Executive\", open: false, items: [{ nm: \"Executive Summary\" }, { nm: \"Board Report\" }] },\n    { nm: \"Asset Inventory V 1.0\" }, { nm: \"Active Directory Insights\" },\n  ] },\n  { g: \"Shared\", open: false, items: [\n    { folder: \"Team SOC\", open: false, items: [{ nm: \"Vulnerability Posture\" }, { nm: \"Incident Response\" }] },\n    { nm: \"Cloud Inventory\" }, { nm: \"Compliance Overview\" },\n  ] },\n  { g: \"Private\", open: false, items: [{ nm: \"My Drafts\" }, { nm: \"Work in Progress\" }] },\n  { g: \"Managed by Axonius\", open: false, items: [{ nm: \"Device Overview\" }, { nm: \"User Overview\" }, { nm: \"Adapters Health\" }, { nm: \"Coverage &amp; Gaps\" }] },\n];\nfunction PanelBtn({ primary, filled, icon: Icon, children, onClick }) {\n  const [h, setH] = useState(false);\n  return (\n     setH(true)} onMouseLeave={() =&gt; setH(false)} className={filled ? \"ax-primary\" : \"ax-press\"}\n      style={{ height: 38, borderRadius: 999, border: filled ? \"none\" : primary ? `1.5px solid ${T.accentText}` : `1px solid ${h ? T.lineStrong : T.line}`, cursor: \"pointer\", width: \"100%\", background: filled ? (h ? T.blueDeep : T.blue) : primary ? (h ? T.accentSoft : \"transparent\") : h ? T.surface2 : \"transparent\", color: filled ? T.onAccent : primary ? T.accentText : T.body, fontSize: 13, fontWeight: 600, fontFamily: T.font, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", gap: 7, boxShadow: \"none\", transition: \"background .14s ease, border-color .14s ease\" }}&gt;\n       {children}\n    \n  );\n}\nfunction CreateDashModal({ onCreate, close }) {\n  const [name, setName] = useState(\"\");\n  const [tpl, setTpl] = useState(\"blank\");\n  const tpls = [{ k: \"blank\", t: \"Blank dashboard\", d: \"Start from an empty canvas\" }, { k: \"template\", t: \"From a template\", d: \"Prebuilt charts to tweak\" }];\n  return createPortal(\n    \n\n      \n e.stopPropagation()} style={{ width: 480, maxWidth: \"92vw\", background: T.canvas, border: `1px solid ${T.line}`, borderRadius: 14, boxShadow: \"0 30px 80px rgba(0,0,0,.55)\", overflow: \"hidden\", animation: \"axRise .26s cubic-bezier(.22,1,.36,1) both\" }}&gt;\n        \n\n          Create dashboard\n          \n        \n        \n\n          \n\n            Dashboard name\n             setName(e.target.value)} placeholder=\"e.g. Security Posture\" style={{ width: \"100%\", height: 40, padding: \"0 14px\", border: `1px solid ${T.line}`, borderRadius: 8, background: T.control, color: T.ink, fontFamily: T.font, fontSize: 14, outline: \"none\", boxSizing: \"border-box\" }} /&gt;\n          \n          \n\n            Starting point\n            \n\n              {tpls.map(o =&gt; (\n                 setTpl(o.k)} style={{ flex: 1, textAlign: \"left\", padding: \"12px 13px\", borderRadius: 10, border: `1.5px solid ${tpl === o.k ? T.accentText : T.line}`, background: tpl === o.k ? T.accentSoft : \"transparent\", cursor: \"pointer\", fontFamily: T.font }}&gt;\n                  \n{o.t}\n                  \n{o.d}\n                \n              ))}\n            \n          \n        \n        \n\n          Cancel\n           name.trim() &amp;&amp; onCreate(name.trim())} className=\"ax-press\" style={{ height: 38, padding: \"0 18px\", borderRadius: 999, border: \"none\", background: name.trim() ? T.blue : T.surface2, color: name.trim() ? T.onAccent : T.faint, fontSize: 13.5, fontWeight: 600, cursor: name.trim() ? \"pointer\" : \"default\", fontFamily: T.font }}&gt;Create dashboard\n        \n      \n    , document.body);\n}\nfunction SidePanel({ collapsed, setCollapsed, activeDash, setActiveDash }) {\n  const [tree, setTree] = useState(DASH_TREE_INIT);\n  const [menu, setMenu] = useState(null);\n  const [editing, setEditing] = useState(null);\n  const [createOpen, setCreateOpen] = useState(false);\n\n  const mut = (fn) =&gt; setTree(t =&gt; fn(t.map(g =&gt; ({ ...g, items: g.items.map(it =&gt; ({ ...it })) }))));\n  const toggleGroup = (gi) =&gt; setTree(t =&gt; t.map((g, i) =&gt; i === gi ? { ...g, open: !g.open } : g));\n  const setActive = (gi, ii) =&gt; { mut(t =&gt; { t.forEach(g =&gt; g.items.forEach(it =&gt; it.active = false)); t[gi].items[ii].active = true; return t; }); if (setActiveDash) setActiveDash(tree[gi].items[ii].nm); };\n  const toggleFav = (gi, ii) =&gt; mut(t =&gt; { t[gi].items[ii].fav = !t[gi].items[ii].fav; return t; });\n  const setDefault = (gi, ii) =&gt; mut(t =&gt; { t.forEach(g =&gt; g.items.forEach(it =&gt; it.def = false)); t[gi].items[ii].def = true; return t; });\n  const duplicate = (gi, ii) =&gt; mut(t =&gt; { t[gi].items.splice(ii + 1, 0, { nm: t[gi].items[ii].nm + \" (copy)\" }); return t; });\n  const rename = (gi, ii, nm) =&gt; mut(t =&gt; { t[gi].items[ii].nm = nm || t[gi].items[ii].nm; return t; });\n  const remove = (gi, ii) =&gt; mut(t =&gt; { t[gi].items.splice(ii, 1); return t; });\n  const createDash = (nm) =&gt; mut(t =&gt; { const p = t.find(g =&gt; g.g === \"Private\"); p.open = true; p.items.push({ nm: nm || \"Untitled dashboard\" }); return t; });\n  const openMenu = (gi, ii, e) =&gt; { const r = e.currentTarget.getBoundingClientRect(); setMenu({ gi, ii, top: r.bottom + 6, left: Math.max(8, r.right - 196) }); };\n\n  if (collapsed) {\n    const favItems = tree.flatMap(g =&gt; g.items).filter(it =&gt; it.fav || it.active);\n    return (\n      \n\n         setCollapsed(false)} title=\"Expand dashboards\" className=\"ax-edge-collapse\"\n          style={{ position: \"absolute\", top: 16, right: -14, zIndex: 6, width: 28, height: 28, borderRadius: \"50%\", border: `1px solid ${T.line}`, background: T.surface, color: T.muted, cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", boxShadow: T.shadow }}&gt;\n          \n        \n         setCreateOpen(true)} style={{ width: 38, height: 38, borderRadius: 8, border: `1.5px solid ${T.accentText}`, background: \"transparent\", cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", color: T.accentText }}&gt;\n          \n        \n        \n\n        {favItems.map((s, i) =&gt; (\n          \n\n            \n            {s.fav &amp;&amp; }\n          \n        ))}\n        {createOpen &amp;&amp;  { createDash(nm); setCreateOpen(false); }} close={() =&gt; setCreateOpen(false)} /&gt;}\n      \n    );\n  }\n  return (\n    \n\n       setCollapsed(true)} title=\"Collapse panel\" className=\"ax-edge-collapse\"\n        style={{ position: \"absolute\", top: 16, right: -14, zIndex: 6, width: 28, height: 28, borderRadius: \"50%\", border: `1px solid ${T.line}`, background: T.surface, color: T.muted, cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", boxShadow: T.shadow }}&gt;\n        \n      \n      \n\n         setCreateOpen(true)}&gt;Create Dashboard\n        Manage Dashboards\n      \n      \n\n        \n\n          \n        \n      \n      \n\n        {tree.map((g, gi) =&gt; (\n          \n        ))}\n      \n      {menu &amp;&amp;  setMenu(null)}\n        actions={{ rename: () =&gt; setEditing({ gi: menu.gi, ii: menu.ii }), duplicate, toggleFav, setDefault, remove }} /&gt;}\n      {createOpen &amp;&amp;  { createDash(nm); setCreateOpen(false); }} close={() =&gt; setCreateOpen(false)} /&gt;}\n    \n  );\n}\nconst DASH_CAT_ICON = { Favorites: Star, Public: Globe, Shared: Users, Private: Lock, \"Managed by Axonius\": ShieldCheck };\nfunction DashGroup({ group, gi, toggleGroup, setActive, toggleFav, openMenu, editing, setEditing, rename }) {\n  const Icon = DASH_CAT_ICON[group.g] || LayoutGrid;\n  return (\n    \n\n       toggleGroup(gi)} className=\"ax-catrow\"\n        style={{ display: \"flex\", alignItems: \"center\", gap: 9, width: \"100%\", border: \"none\", background: \"transparent\", cursor: \"pointer\", padding: \"8px 8px\", borderRadius: 8, fontFamily: T.font }}&gt;\n        \n        \n        {group.g}\n        {group.g === \"Favorites\" ? group.items.filter(it =&gt; it.fav !== false).length : group.items.length}\n      \n      {group.open &amp;&amp; group.items\n        .filter(it =&gt; group.g !== \"Favorites\" || it.fav !== false)\n        .map((it, ii) =&gt;\n          it.folder\n            ? \n            : \n        )}\n    \n  );\n}\nfunction DashFolder({ folder, indent, onToggle }) {\n  const [h, setH] = useState(false);\n  const [open, setOpen] = useState(folder.open);\n  const toggle = () =&gt; { setOpen(o =&gt; !o); if (onToggle) onToggle(!open); };\n  const FIcon = open ? FolderOpen : Folder;\n  return (\n    \n\n      \n setH(true)} onMouseLeave={() =&gt; setH(false)} onClick={toggle}\n        style={{ display: \"flex\", alignItems: \"center\", gap: 8, height: 34, padding: `0 8px 0 ${indent || 22}px`, borderRadius: 8, cursor: \"pointer\", background: h ? T.surface2 : \"transparent\", transition: \"background .12s\" }}&gt;\n        \n        \n        {folder.folder}\n      \n      {open &amp;&amp; folder.items.map((it, i) =&gt; (\n        \n e.currentTarget.style.background = T.surface2} onMouseLeave={(e) =&gt; e.currentTarget.style.background = \"transparent\"}&gt;\n          \n          {it.nm}\n        \n      ))}\n    \n  );\n}\nfunction DashItem({ item, gi, ii, setActive, toggleFav, openMenu, editing, setEditing, rename }) {\n  const [h, setH] = useState(false);\n  return (\n    \n setH(true)} onMouseLeave={() =&gt; setH(false)} onClick={() =&gt; !editing &amp;&amp; setActive(gi, ii)} className=\"ax-press\"\n      style={{ position: \"relative\", display: \"flex\", alignItems: \"center\", gap: 9, height: 36, padding: \"0 8px 0 28px\", margin: \"1px 0\", cursor: \"pointer\", borderRadius: 8, border: \"none\", background: item.active ? T.accentSoft : h ? T.surface2 : \"transparent\", transition: \"background .14s\" }}&gt;\n      \n      {editing ? (\n         e.stopPropagation()}\n          onBlur={(e) =&gt; { rename(gi, ii, e.target.value.trim()); setEditing(null); }}\n          onKeyDown={(e) =&gt; { if (e.key === \"Enter\") { rename(gi, ii, e.target.value.trim()); setEditing(null); } if (e.key === \"Escape\") setEditing(null); }}\n          style={{ flex: 1, minWidth: 0, border: `1px solid ${T.blue}`, borderRadius: 6, padding: \"2px 6px\", fontSize: 13.5, fontFamily: T.font, color: T.ink, outline: \"none\", background: T.surface }} /&gt;\n      ) : (\n        {item.nm}\n      )}\n      {(h || item.fav) &amp;&amp; !editing &amp;&amp; (\n         { e.stopPropagation(); toggleFav(gi, ii); }} title={item.fav ? \"Remove from favorites\" : \"Add to favorites\"} className=\"ax-star\"\n          style={{ width: 22, height: 22, borderRadius: 6, border: \"none\", background: \"transparent\", cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", padding: 0, flexShrink: 0 }}&gt;\n          \n        \n      )}\n      {h &amp;&amp; !editing &amp;&amp; (\n         { e.stopPropagation(); openMenu(gi, ii, e); }} title=\"More actions\"\n          style={{ width: 22, height: 22, borderRadius: 6, border: \"none\", background: \"transparent\", cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", padding: 0, flexShrink: 0, color: T.muted }}&gt;\n          \n        \n      )}\n    \n  );\n}\nfunction RowMenu({ menu, tree, close, actions }) {\n  const it = tree[menu.gi]?.items?.[menu.ii] || {};\n  const rows = [\n    { ic: Pencil, l: \"Rename\", fn: () =&gt; actions.rename() },\n    { ic: Copy, l: \"Duplicate\", fn: () =&gt; actions.duplicate(menu.gi, menu.ii) },\n    { ic: Star, l: it.fav ? \"Remove from favorites\" : \"Add to favorites\", fn: () =&gt; actions.toggleFav(menu.gi, menu.ii) },\n    { ic: Check, l: it.def ? \"Default dashboard\" : \"Set as default\", fn: () =&gt; actions.setDefault(menu.gi, menu.ii) },\n    { ic: Download, l: \"Export\", fn: () =&gt; {} },\n    { sep: true },\n    { ic: Trash2, l: \"Delete\", danger: true, fn: () =&gt; actions.remove(menu.gi, menu.ii) },\n  ];\n  return (\n    &lt;&gt;\n      \n\n      \n\n        {rows.map((a, i) =&gt; a.sep\n          ? \n\n          :  { a.fn(); close(); }}&gt;{a.l})}\n      \n    \n  );\n}\nfunction MenuRow({ icon: Icon, danger, children, onClick }) {\n  const [h, setH] = useState(false);\n  return (\n     setH(true)} onMouseLeave={() =&gt; setH(false)}\n      style={{ display: \"flex\", alignItems: \"center\", gap: 9, width: \"100%\", border: \"none\", borderRadius: 8, cursor: \"pointer\", padding: \"7px 9px\", fontSize: 13, fontFamily: T.font, fontWeight: 500, textAlign: \"left\", color: danger ? T.red : T.body, background: h ? (danger ? `${T.red}10` : T.canvas) : \"transparent\" }}&gt;\n       {children}\n    \n  );\n}\n\nfunction ModuleHeader({ view, activeDash }) {\n  const isDash = view === \"dashboard\";\n  return (\n    \n\n      \n{isDash ? \"Dashboards / Favorites\" : \"Assets / All Devices\"}\n      \n\n        \n\n          \n{isDash ? activeDash : \"Assets\"}\n          {isDash &amp;&amp; }\n        \n        \n\n          {isDash ? &lt;&gt;\n             Updated 2m ago\n            Add Chart\n           : &lt;&gt;\n            Export\n            New Query\n          }\n          \n        \n      \n    \n  );\n}\nfunction HdrBtn({ icon: Icon, children, primary, filled }) {\n  const [h, setH] = useState(false);\n  return  setH(true)} onMouseLeave={() =&gt; setH(false)} style={{ display: \"flex\", alignItems: \"center\", gap: 6, height: 34, padding: \"0 14px\", borderRadius: 999, cursor: \"pointer\", fontFamily: T.font, fontSize: 13.5, fontWeight: 600, border: filled ? \"none\" : (primary ? `1.5px solid ${T.accentText}` : `1px solid ${h ? T.lineStrong : T.line}`), background: filled ? (h ? T.blueDeep : T.blue) : (primary ? (h ? T.accentSoft : \"transparent\") : (h ? T.surface2 : T.control)), color: filled ? T.onAccent : (primary ? T.accentText : T.body) }}&gt;{children};\n}\n\nfunction AxoniusApp() {\n  const [view, setView] = useState(\"dashboard\");\n  const [collapsed, setCollapsed] = useState(false);\n  const [invCollapsed, setInvCollapsed] = useState(false);\n  const [theme, setTheme] = useState(\"dark\");\n  const [activeDash, setActiveDash] = useState(\"Axonius Dashboard\");\n  T = THEMES[theme];\n  useEffect(() =&gt; {\n    document.body.style.background = THEMES[theme].shell;\n    const el = document.documentElement;\n    el.classList.add(\"theming\");\n    const id = setTimeout(() =&gt; el.classList.remove(\"theming\"), 450);\n    return () =&gt; clearTimeout(id);\n  }, [theme]);\n  return (\n    \n\n      {`@import url('https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500;600;700&amp;family=Schibsted+Grotesk:wght@500;600;700&amp;display=swap'); * { box-sizing: border-box; } .theming, .theming * { transition: background-color .4s ease, border-color .4s ease, color .35s ease, fill .3s ease, stroke .3s ease !important; } *::-webkit-scrollbar { width: 9px; height: 9px; } *::-webkit-scrollbar-thumb { background: ${T.bg40}; border-radius: 5px; } *::-webkit-scrollbar-track { background: transparent; }\n        .ax-tile *::-webkit-scrollbar-thumb { background: transparent; transition: background .2s ease; }\n        .ax-tile:hover *::-webkit-scrollbar-thumb { background: ${T.bg40}; }\n        .ax-tbl::-webkit-scrollbar-thumb { background: transparent; } .ax-tbl:hover::-webkit-scrollbar-thumb { background: ${T.bg40}; } .ax-tbl::-webkit-scrollbar-corner { background: transparent; }\n        input::placeholder { color: ${T.muted}; opacity: 1; }\n        .ax-catrow:hover { background: ${T.surface2}; }\n        .ax-catrow:hover .ax-favbtn { opacity: 1 !important; }\n        .ax-edge-collapse { opacity: 0; transform: scale(.8); transition: opacity .15s ease, transform .15s ease; }\n        .ax-sidepanel:hover .ax-edge-collapse { opacity: 1; transform: scale(1); }\n        button, [role=\"button\"] { transition: transform .14s cubic-bezier(.34,1.56,.64,1), background-color .15s ease, box-shadow .18s ease, border-color .15s ease, color .12s ease; }\n        button:not(:disabled):active { transform: scale(.92); }\n        .ax-press { transition: transform .14s cubic-bezier(.34,1.56,.64,1), background-color .14s ease; }\n        .ax-press:active { transform: scale(.95); }\n        .ax-card { transition: transform .2s cubic-bezier(.34,1.56,.64,1), box-shadow .2s ease, border-color .15s ease; }\n        .ax-card:hover { border-color: ${T.lineStrong} !important; box-shadow: ${T.shadow} !important; }\n        .ax-primary:hover { transform: translateY(-1px); box-shadow: 0 6px 16px rgba(37,99,235,.4) !important; }\n        .ax-primary:active { transform: translateY(0) scale(.96); }\n        @keyframes axRise { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }\n        .ax-rise { animation: axRise .45s cubic-bezier(.22,1,.36,1) both; }\n        @keyframes axJiggle { 0%, 100% { transform: rotate(-0.5deg); } 50% { transform: rotate(0.5deg); } }\n        .ax-jiggle { animation: axJiggle .32s ease-in-out infinite; }\n        @keyframes axPop { 0% { transform: scale(1); } 45% { transform: scale(1.25) rotate(-8deg); } 100% { transform: scale(1); } }\n        .ax-star:hover { animation: axPop .4s ease; }\n        @keyframes axSpin { to { transform: rotate(360deg); } }\n        .ax-spin:hover { animation: axSpin .6s ease; }\n        button:not(:disabled):hover { transform: translateY(-1px); }\n        @keyframes axGrow { from { transform: scaleX(0); } to { transform: scaleX(1); } }\n        @keyframes axGrowY { from { transform: scaleY(0); } to { transform: scaleY(1); } }\n        @keyframes axDraw { to { stroke-dashoffset: 0; } }\n        @keyframes axFade { from { opacity: 0; } to { opacity: 1; } }\n        @keyframes axSlideIn { from { transform: translateX(100%); } to { transform: translateX(0); } }\n        @keyframes axBounce { 0% { transform: translateY(0) scale(1); } 35% { transform: translateY(-4px) scale(1.14); } 70% { transform: translateY(0) scale(1); } 100% { transform: translateY(0) scale(1); } }\n        .ax-rail:hover .ax-railicon { animation: axBounce .5s ease; }\n        .ax-flat:hover { transform: none !important; }`}\n      \n      \n\n        \n        \n\n          {view === \"dashboard\" &amp;&amp; }\n          {view === \"assets\" &amp;&amp; }\n          \n\n            {view === \"dashboard\" &amp;&amp; }\n            {view === \"dashboard\" ? (\n              \n\n                {DASH_TILESETS[activeDash]\n                  ? \n                  : &lt;&gt;}\n              \n            ) : view === \"assets\" ? (\n              \n            ) : (\n              \n\n                {RAIL.find(r =&gt; r.key === view)?.label} view \u2014 coming soon\n              \n            )}\n          \n        \n      \n    \n  );\n}\n\ncreateRoot(document.getElementById(\"root\")).render();\n    \n  \n    fetch('/.inspector/overlay.js')\n      .then(r =&gt; r.text())\n      .then(code =&gt; { const s = document.createElement('script'); s.textContent = code; document.head.appendChild(s); })\n      .catch(() =&gt; {});\n  \n  \n\n", "creation_timestamp": "2026-06-23T12:21:01.000000Z"}, {"uuid": "be53f183-e4f4-4748-8d1f-016d610bcdf6", "vulnerability_lookup_origin": "caeb2787-0d58-4236-9039-7c86c3e566f3", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://vulnerability.circl.lu/known-exploited-vulnerabilities-catalog/b36567fe-2a58-43ea-b916-3960da8c7a1c", "content": "", "creation_timestamp": "2026-06-23T14:05:47.317601Z"}, {"uuid": "a1857fc8-8e1f-4280-ba15-39a53869153e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://gist.github.com/ShaiOnionGod/698e64623dff9eabc7bcf40ecdbc049d", "content": "\n\n\n  \n  \n  Design Editor \u2014 Axonius\n  \n  \n    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n    body { display: flex; flex-direction: column; height: 100vh; overflow: hidden; background: #13141c; color: #e2e8f0; font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif; }\n    #toolbar { display: flex; align-items: center; gap: 10px; padding: 0 18px; height: 50px; background: #191a23; border-bottom: 1px solid #2a2d3c; flex-shrink: 0; user-select: none; }\n    #toolbar-title { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; }\n    #toolbar-title svg { flex-shrink: 0; opacity: .8; }\n    #toolbar-title span { font-size: 13.5px; font-weight: 600; letter-spacing: -.01em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n    #toolbar-title small { font-size: 11px; font-weight: 400; color: #8494b5; background: #222431; border: 1px solid #2a2d3c; border-radius: 5px; padding: 2px 7px; margin-left: 4px; }\n    .btn { display: inline-flex; align-items: center; gap: 6px; height: 32px; padding: 0 14px; border-radius: 999px; border: 1px solid #3a3d52; background: transparent; color: #c8d0e0; font-size: 12.5px; font-weight: 500; cursor: pointer; font-family: inherit; transition: background .12s, border-color .12s; white-space: nowrap; }\n    .btn:hover { background: #222431; border-color: #4f5470; }\n    .btn-primary { background: #4f6aff; border-color: #4f6aff; color: #fff; }\n    .btn-primary:hover { background: #3d57ff; border-color: #3d57ff; }\n    #layout { display: flex; flex: 1; min-height: 0; }\n    #editor-pane { width: 48%; flex-shrink: 0; display: flex; flex-direction: column; min-height: 0; border-right: 1px solid #2a2d3c; }\n    #pane-header { display: flex; align-items: center; gap: 8px; padding: 0 14px; height: 34px; background: rgba(22,23,32,.5); border-bottom: 1px solid #1e2030; font-size: 11.5px; color: #8494b5; flex-shrink: 0; }\n    #pane-header .filename { font-weight: 500; color: #bdc8e0; }\n    #status { margin-left: auto; font-size: 11px; }\n    #status.saving { color: #4ade80; }\n    #status.idle { color: #8494b5; }\n    #monaco-container { flex: 1; min-height: 0; }\n    #preview-pane { flex: 1; min-width: 0; display: flex; flex-direction: column; }\n    #preview-header { display: flex; align-items: center; gap: 8px; padding: 0 14px; height: 34px; background: rgba(22,23,32,.5); border-bottom: 1px solid #1e2030; font-size: 11.5px; color: #8494b5; flex-shrink: 0; }\n    #preview-dot { width: 7px; height: 7px; border-radius: 50%; background: #4ade80; flex-shrink: 0; }\n    #preview-dot.loading { background: #facc15; animation: pulse .8s ease-in-out infinite; }\n    @keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: .35; } }\n    #preview { flex: 1; border: none; background: #fff; }\n    .divider { width: 4px; background: #2a2d3c; cursor: col-resize; flex-shrink: 0; transition: background .12s; }\n    .divider:hover, .divider.dragging { background: #4f6aff; }\n  \n\n\n  \n\n    \n\n      \n      Axonius Design Sandbox editor\n    \n    &#8635; Reset\n    &#11096; Copy HTML\n    &#8595; Download\n  \n\n  \n\n    \n\n      \n\n        design-sandbox3.html\n        ready\n      \n      \n\n    \n    \n\n    \n\n      \n\n        \n\n        Live Preview\n        updates 1s after edit\n      \n      \n    \n  \n\n  \n  \n    const INITIAL_SOURCE = \"\\n\\n  \\n    \\n    \\n    Axonius \\u2014 Dashboard prototype&lt;\\/title&gt;\\n    \\n    \\n      {\\n        \\\"imports\\\": {\\n          \\\"react\\\": \\\"https://esm.sh/react@18.3.1\\\",\\n          \\\"react-dom\\\": \\\"https://esm.sh/react-dom@18.3.1\\\",\\n          \\\"react-dom/client\\\": \\\"https://esm.sh/react-dom@18.3.1/client\\\",\\n          \\\"lucide-react\\\": \\\"https://esm.sh/lucide-react@0.456.0?deps=react@18.3.1\\\"\\n        }\\n      }\\n    &lt;\\/script&gt;\\n    &lt;\\/script&gt;\\n    \\n      html, body { margin: 0; height: 100%; background: #191A23; font-family: 'Hanken Grotesk', -apple-system, BlinkMacSystemFont, sans-serif; }\\n      #root { height: 100%; }\\n      .sb-tag { position: fixed; right: 14px; bottom: 12px; z-index: 99999; font: 700 10px/1 ui-monospace, monospace; letter-spacing: .14em; color: #0D5ED7; background: rgba(255,255,255,.9); border: 1px solid #E0E4EC; border-radius: 999px; padding: 6px 10px; box-shadow: 0 6px 18px rgba(27,32,70,.12); pointer-events: none; }\\n    &lt;\\/style&gt;\\n  &lt;\\/head&gt;\\n  \\n    \n&lt;\\/div&gt;\\n    \nSANDBOX&lt;\\/div&gt;\\n\\n    \\nimport React, { useState, useRef, useCallback, useEffect } from \\\"react\\\";\\nimport { createRoot } from \\\"react-dom/client\\\";\\nimport { createPortal } from \\\"react-dom\\\";\\nimport {\\n  Search, Star, MoreHorizontal, Info, ListFilter, ArrowUpDown, Columns3,\\n  Plus, ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight, ChevronDown,\\n  ArrowUpRight, ArrowDownRight, LayoutGrid, Server, ShieldCheck, Boxes,\\n  Workflow, Cable, Bell, CircleHelp, Clock, Play, Grip, PanelLeftClose,\\n  PanelLeftOpen, Download, GripVertical, X, Settings, ShieldAlert, Crosshair,\\n  Pin, PinOff, RotateCw, Filter, Table2, ChevronsUpDown, Pencil, Check, Trash2,\\n  Users, Layers, RotateCcw, Save, Copy, Calendar, Menu, Zap, Link, BarChart3, Sun, Moon,\\n  Globe, Lock, Folder, FolderOpen\\n} from \\\"lucide-react\\\";\\n\\n/**\\n * Axonius \\u2014 Dashboard + Assets table views\\n * Collapsible side panel \\u00b7 resizable + reorderable dashboard tiles\\n * Real Axonius header \\u00b7 Twenty-style table \\u00b7 tokens from Figma source\\n */\\n\\nfunction AxoniusLogo() {\\n  return &lt;\\/svg&gt;`.replaceAll('fill=\\\"black\\\"', `fill=\\\"${T.ink}\\\"`) }} /&gt;;\\n}\\n\\n// Data / highlight palette \\u2014 bright fills used in both themes (light-mode text variants applied where colored text is needed)\\nconst VIZ = { green: \\\"#5BC4BF\\\", greenDeep: \\\"#247D78\\\", mint: \\\"#8ED0FF\\\", lilac: \\\"#AD85FF\\\", lilacPale: \\\"#CDB4FF\\\", orange: \\\"#FF8C66\\\", amber: \\\"#FFB286\\\" };\\nconst FONT = \\\"'Hanken Grotesk', -apple-system, sans-serif\\\", DISPLAY = \\\"'Schibsted Grotesk', -apple-system, sans-serif\\\";\\nconst THEMES = {\\n  dark: {\\n    ink: \\\"#E4E8F0\\\", body: \\\"#AEB7CC\\\", muted: \\\"#8494B5\\\", faint: \\\"#69738C\\\",\\n    line: \\\"rgba(132,148,181,0.20)\\\", lineSoft: \\\"rgba(132,148,181,0.12)\\\", hair: \\\"rgba(132,148,181,0.09)\\\", lineStrong: \\\"rgba(132,148,181,0.42)\\\",\\n    bg100: \\\"#AEB7CC\\\", bg90: \\\"#9AA3BC\\\", bg80: \\\"#8494B5\\\", bg40: \\\"#8494B5\\\",\\n    blue: \\\"#5C7CFF\\\", blueDeep: \\\"#4E6CF5\\\", green: \\\"#5BC4BF\\\", red: \\\"#FF8C66\\\",\\n    shell: \\\"#191A23\\\", headerBg: \\\"#191A23\\\", canvas: \\\"#191A23\\\", surface: \\\"#222431\\\", surface2: \\\"#2A2D3C\\\", control: \\\"#262838\\\",\\n    white: \\\"#FFFFFF\\\", onAccent: \\\"#191A23\\\", isLight: false, coin: \\\"#2A2D3C\\\", accentSoft: \\\"rgba(92,124,255,0.16)\\\", accentText: \\\"#5C7CFF\\\", accentBorder: \\\"rgba(92,124,255,0.50)\\\",\\n    viz: VIZ, shadow: \\\"0 1px 2px rgba(0,0,0,0.4), 0 14px 34px rgba(0,0,0,0.5)\\\", font: FONT, display: DISPLAY,\\n  },\\n  light: {\\n    ink: \\\"#2E3850\\\", body: \\\"#465472\\\", muted: \\\"#6B7894\\\", faint: \\\"#8494B5\\\",\\n    line: \\\"rgba(132,148,181,0.30)\\\", lineSoft: \\\"rgba(132,148,181,0.18)\\\", hair: \\\"rgba(132,148,181,0.12)\\\", lineStrong: \\\"rgba(132,148,181,0.55)\\\",\\n    bg100: \\\"#465472\\\", bg90: \\\"#5A6889\\\", bg80: \\\"#8494B5\\\", bg40: \\\"#8494B5\\\",\\n    blue: \\\"#4361EE\\\", blueDeep: \\\"#3A55D6\\\", green: \\\"#247D78\\\", red: \\\"#BF4B26\\\",\\n    shell: \\\"#F9FAFB\\\", headerBg: \\\"#F9FAFB\\\", canvas: \\\"#FFFFFF\\\", surface: \\\"#FFFFFF\\\", surface2: \\\"#F1F2F6\\\", control: \\\"#FFFFFF\\\",\\n    white: \\\"#FFFFFF\\\", onAccent: \\\"#FFFFFF\\\", isLight: true, coin: \\\"#FFFFFF\\\", accentSoft: \\\"rgba(67,97,238,0.10)\\\", accentText: \\\"#4361EE\\\", accentBorder: \\\"rgba(67,97,238,0.45)\\\",\\n    viz: VIZ, shadow: \\\"0 1px 2px rgba(70,84,114,0.06), 0 10px 26px rgba(70,84,114,0.08)\\\", font: FONT, display: DISPLAY,\\n  },\\n};\\nlet T = THEMES.dark;\\n// Severity scale stays semantic (red \\u2192 orange \\u2192 yellow \\u2192 green, neutral for informational) in both themes\\nconst SEVC = { critical: \\\"#E5484D\\\", high: \\\"#F0743E\\\", medium: \\\"#F5C28C\\\", low: \\\"#4F8FE3\\\", info: \\\"#CFC4F2\\\" };\\nconst fmt = (n) =&gt; n.toLocaleString(\\\"en-US\\\");\\nconst tnum = { fontFeatureSettings: '\\\"tnum\\\" 1', fontVariantNumeric: \\\"tabular-nums\\\" };\\n\\n/* ============ vendor logos ============ */\\nfunction LogoMark({ brand, size = 32 }) {\\n  const glyph = {\\n    aws: aws&lt;\\/text&gt;&lt;\\/svg&gt;,\\n    microsoft: &lt;\\/svg&gt;,\\n    azure: &lt;\\/svg&gt;,\\n    googlecloud: &lt;\\/svg&gt;,\\n    oracle: &lt;\\/svg&gt;,\\n    vmware: vm&lt;\\/text&gt;&lt;\\/svg&gt;,\\n    okta: &lt;\\/svg&gt;,\\n    crowdstrike: &lt;\\/svg&gt;,\\n    active_directory: &lt;\\/svg&gt;,\\n    sentinelone: &lt;\\/svg&gt;,\\n    service_now: &lt;\\/svg&gt;,\\n    cisco: cisco&lt;\\/text&gt;&lt;\\/g&gt;&lt;\\/svg&gt;,\\n    cisco_meraki: &lt;\\/svg&gt;,\\n    cisco_ise: cisco&lt;\\/text&gt;&lt;\\/g&gt;&lt;\\/svg&gt;,\\n    checkpoint: &lt;\\/svg&gt;,\\n    chef: &lt;\\/svg&gt;,\\n    claroty: &lt;\\/svg&gt;,\\n    cylance: &lt;\\/svg&gt;,\\n    epo: &lt;\\/svg&gt;,\\n    paloalto: &lt;\\/svg&gt;,\\n    tanium: &lt;\\/svg&gt;,\\n    tenable: &lt;\\/svg&gt;,\\n    forescout: &lt;\\/svg&gt;,\\n    zoom: &lt;\\/svg&gt;,\\n    miro: &lt;\\/svg&gt;,\\n    dropbox: &lt;\\/svg&gt;,\\n    salesforce: &lt;\\/svg&gt;,\\n    slack: &lt;\\/svg&gt;,\\n    office365: &lt;\\/svg&gt;,\\n    google_workspace: &lt;\\/svg&gt;,\\n  }[brand] || {(brand || \\\"?\\\").slice(0, 2).toUpperCase()}&lt;\\/span&gt;;\\n  return \n{glyph}&lt;\\/span&gt;&lt;\\/div&gt;;\\n}\\n\\n/* ============ chips ============ */\\n// Tags use the dashboard data palette (turquoise / purple / baby-blue / orange) \\u2014 dark text variant in light mode, bright in dark\\nconst TAGV = [{ b: \\\"#5BC4BF\\\", d: \\\"#247D78\\\" }, { b: \\\"#AD85FF\\\", d: \\\"#683CB5\\\" }, { b: \\\"#8ED0FF\\\", d: \\\"#1E75B3\\\" }, { b: \\\"#FF8C66\\\", d: \\\"#BF4B26\\\" }];\\nfunction Tag({ label }) {\\n  let n = 0; for (let i = 0; i &lt; label.length; i++) n = (n * 31 + label.charCodeAt(i)) &gt;&gt;&gt; 0;\\n  const t = TAGV[n % TAGV.length];\\n  return {label}&lt;\\/span&gt;;\\n}\\n// Cursor-following tooltip (like sandbox 2) \\u2014 surface card with readable dark text\\nfunction FloatTip({ x, y, children }) {\\n  return createPortal(\n{children}&lt;\\/div&gt;, document.body);\\n}\\nfunction UserAvatar({ name, size = 24 }) {\\n  const s = name || \\\"?\\\"; let n = 0; for (let i = 0; i &lt; s.length; i++) n = (n * 31 + s.charCodeAt(i)) &gt;&gt;&gt; 0;\\n  const t = TAGV[n % TAGV.length];\\n  return {s.trim()[0] || \\\"?\\\"}&lt;\\/span&gt;;\\n}\\nconst APP_LOGO_MAP = {\\n  Zoom: \\\"zoom\\\", \\\"Zoom One Pro\\\": \\\"zoom\\\",\\n  Miro: \\\"miro\\\",\\n  Dropbox: \\\"dropbox\\\",\\n  Salesforce: \\\"salesforce\\\",\\n  Slack: \\\"slack\\\",\\n  Google: \\\"googlecloud\\\", \\\"Google WS Ent. Starter\\\": \\\"google_workspace\\\", \\\"Google WS Ent. Standard\\\": \\\"google_workspace\\\", \\\"Google WS Business\\\": \\\"google_workspace\\\",\\n  Office365: \\\"office365\\\", \\\"Microsoft 365 G3 GCC\\\": \\\"office365\\\", \\\"Microsoft 365 E5\\\": \\\"office365\\\", \\\"Microsoft Power Aut\\u2026\\\": \\\"office365\\\",\\n  Microsoft: \\\"microsoft\\\",\\n};\\nfunction AppAvatar({ name, size = 22 }) {\\n  const brand = APP_LOGO_MAP[name];\\n  if (brand) return ;\\n  const s = name || \\\"?\\\"; let n = 0; for (let i = 0; i &lt; s.length; i++) n = (n * 31 + s.charCodeAt(i)) &gt;&gt;&gt; 0;\\n  const t = TAGV[n % TAGV.length];\\n  return {s.trim()[0] || \\\"?\\\"}&lt;\\/span&gt;;\\n}\\nconst STATUS = { Active: T.green, Warning: T.viz.amber, Inactive: T.faint, Error: T.red };\\nfunction StatusChip({ status }) {\\n  return {status}&lt;\\/span&gt;;\\n}\\nconst RISK = { Critical: SEVC.critical, High: SEVC.high, Medium: SEVC.medium, Low: SEVC.low };\\nfunction RiskChip({ level }) {\\n  const c = RISK[level];\\n  return {level}&lt;\\/span&gt;;\\n}\\nfunction Delta({ up, children }) {\\n  const color = up ? T.green : T.red;\\n  return {up ?  : }{children}&lt;\\/span&gt;;\\n}\\nfunction IconBtn({ children, onClick }) {\\n  const [h, setH] = useState(false);\\n  return  setH(true)} onMouseLeave={() =&gt; setH(false)} style={{ width: 26, height: 26, borderRadius: 6, border: \\\"none\\\", cursor: \\\"pointer\\\", background: h ? T.surface2 : \\\"transparent\\\", color: h ? T.ink : T.faint, display: \\\"flex\\\", alignItems: \\\"center\\\", justifyContent: \\\"center\\\" }}&gt;{children}&lt;\\/button&gt;;\\n}\\n\\n/* ============ KPIs ============ */\\nconst KPIS = [\\n  { label: \\\"Total Assets\\\", value: 84355, delta: \\\"12.4%\\\", up: true },\\n  { label: \\\"Cloud Coverage\\\", value: 96.2, suffix: \\\"%\\\", delta: \\\"2.1%\\\", up: true },\\n  { label: \\\"Open Vulnerabilities\\\", value: 382, delta: \\\"8.0%\\\", up: false },\\n  { label: \\\"Unmanaged Devices\\\", value: 1204, delta: \\\"3.2%\\\", up: false },\\n];\\nfunction useCountUp(target, dur = 950) {\\n  const [v, setV] = useState(0);\\n  useEffect(() =&gt; {\\n    let raf; const start = performance.now();\\n    const tick = (now) =&gt; { const p = Math.min(1, (now - start) / dur); setV(target * (1 - Math.pow(1 - p, 3))); if (p &lt; 1) raf = requestAnimationFrame(tick); };\\n    raf = requestAnimationFrame(tick); return () =&gt; cancelAnimationFrame(raf);\\n  }, [target]);\\n  return v;\\n}\\nfunction KpiValue({ value, suffix }) {\\n  const v = useCountUp(value);\\n  const text = suffix === \\\"%\\\" ? v.toFixed(1) : fmt(Math.round(v));\\n  return {text}{suffix || \\\"\\\"}&lt;\\/span&gt;;\\n}\\nfunction KpiRow() {\\n  return (\\n    \n\\n      {KPIS.map((k, i) =&gt; (\\n        \n\\n          \n{k.label}&lt;\\/div&gt;\\n          \n\\n            \\n            {k.delta}&lt;\\/Delta&gt;\\n          &lt;\\/div&gt;\\n        &lt;\\/div&gt;\\n      ))}\\n    &lt;\\/div&gt;\\n  );\\n}\\n\\n/* ============ chart bodies ============ */\\nconst PIE = [\\n  { c: \\\"green\\\", label: \\\"Windows Assets\\\", val: 1236 }, { c: \\\"greenDeep\\\", label: \\\"Active Directory\\\", val: 411 },\\n  { c: \\\"mint\\\", label: \\\"SCCM Managed\\\", val: 198 }, { c: \\\"lilac\\\", label: \\\"Intune Managed\\\", val: 89 }, { c: \\\"lilacPale\\\", label: \\\"Unmanaged\\\", val: 43 },\\n];\\nfunction DonutBody() {\\n  const [hi, setHi] = useState(null);\\n  const [tip, setTip] = useState(null);\\n  const [off, setOff] = useState(() =&gt; new Set());\\n  const [drawn, setDrawn] = useState(false);\\n  useEffect(() =&gt; { const id = setTimeout(() =&gt; setDrawn(true), 60); return () =&gt; clearTimeout(id); }, []);\\n  const r = 46, sw = 14, C = 2 * Math.PI * r, gap = 5;\\n  const toggle = (i) =&gt; setOff(s =&gt; { const n = new Set(s); n.has(i) ? n.delete(i) : n.add(i); return n; });\\n  const visTotal = PIE.reduce((a, p, i) =&gt; a + (off.has(i) ? 0 : p.val), 0) || 1;\\n  let acc = 0;\\n  const segs = PIE.map((p, i) =&gt; {\\n    if (off.has(i)) return null;\\n    const len = (p.val / visTotal) * C;\\n    const seg = Math.max(1, len - gap);\\n    const active = hi === i, dim = hi !== null &amp;&amp; !off.has(hi) &amp;&amp; !active;\\n    const node = (\\n       { setHi(i); setTip({ i, x: e.clientX, y: e.clientY }); }} onMouseMove={(e) =&gt; setTip({ i, x: e.clientX, y: e.clientY })} onMouseLeave={() =&gt; { setHi(null); setTip(null); }} onClick={() =&gt; toggle(i)}\\n        style={{ opacity: dim ? 0.35 : 1, cursor: \\\"pointer\\\", transition: \\\"stroke-dasharray .8s cubic-bezier(.22,1,.36,1), stroke-width .18s ease, opacity .18s ease\\\" }} /&gt;\\n    );\\n    acc += len; return node;\\n  });\\n  const liveHi = hi !== null &amp;&amp; !off.has(hi);\\n  const center = liveHi ? { big: ((PIE[hi].val / visTotal) * 100).toFixed(1) + \\\"%\\\", small: PIE[hi].label } : { big: fmt(visTotal), small: \\\"Total Assets\\\" };\\n  return (\\n    \n\\n      \n\\n        \\n          \\n          {segs}\\n        &lt;\\/svg&gt;\\n        \n\\n          {center.big}&lt;\\/span&gt;\\n          {center.small}&lt;\\/span&gt;\\n        &lt;\\/div&gt;\\n      &lt;\\/div&gt;\\n      \n\\n        {PIE.map((p, i) =&gt; {\\n          const isOff = off.has(i);\\n          return (\\n            \n { setHi(i); if (!isOff) setTip({ i, x: e.clientX, y: e.clientY }); }} onMouseMove={(e) =&gt; !isOff &amp;&amp; setTip({ i, x: e.clientX, y: e.clientY })} onMouseLeave={() =&gt; { setHi(null); setTip(null); }} onClick={() =&gt; toggle(i)}\\n              title={isOff ? \\\"Click to show\\\" : \\\"Click to hide\\\"}\\n              style={{ display: \\\"flex\\\", alignItems: \\\"center\\\", gap: 9, padding: \\\"5px 6px\\\", borderRadius: 6, cursor: \\\"pointer\\\", background: hi === i &amp;&amp; !isOff ? T.canvas : \\\"transparent\\\", transition: \\\"background .12s\\\" }}&gt;\\n              \\n              {p.label}&lt;\\/span&gt;\\n              {isOff ? \\\"Hidden\\\" : (hi === i ? fmt(p.val) : ((p.val / visTotal) * 100).toFixed(1) + \\\"%\\\")}&lt;\\/span&gt;\\n            &lt;\\/div&gt;\\n          );\\n        })}\\n      &lt;\\/div&gt;\\n      {tip !== null &amp;&amp; !off.has(tip.i) &amp;&amp; \\n        \n{PIE[tip.i].label}&lt;\\/div&gt;\\n        \n{fmt(PIE[tip.i].val)}&lt;\\/div&gt;\\n        \n{(PIE[tip.i].val / visTotal * 100).toFixed(1)}% of assets&lt;\\/div&gt;\\n      &lt;\\/FloatTip&gt;}\\n    &lt;\\/div&gt;\\n  );\\n}\\nconst LINE_LABELS = [\\\"W1\\\", \\\"W2\\\", \\\"W3\\\", \\\"W4\\\", \\\"W5\\\", \\\"W6\\\", \\\"W7\\\", \\\"W8\\\", \\\"W9\\\", \\\"W10\\\", \\\"W11\\\", \\\"W12\\\"];\\nconst LINE_SERIES = [\\n  { key: \\\"all\\\", label: \\\"All Devices\\\", color: T.viz.green, pts: [38000, 41200, 44500, 47800, 51000, 55300, 59800, 63200, 68500, 72100, 78400, 84355] },\\n  { key: \\\"managed\\\", label: \\\"Managed\\\", color: T.viz.lilac, pts: [29000, 31000, 33500, 35800, 38000, 41000, 44500, 47200, 50500, 54100, 58400, 61200] },\\n  { key: \\\"cloud\\\", label: \\\"Cloud\\\", color: T.viz.orange, pts: [8000, 9200, 10500, 11800, 13000, 14300, 15800, 17200, 18500, 20100, 21400, 22097] },\\n  { key: \\\"unmanaged\\\", label: \\\"Unmanaged\\\", color: T.viz.greenDeep, pts: [3200, 3100, 3300, 3000, 3500, 3300, 3100, 2900, 2700, 2500, 2300, 2100] },\\n];\\nfunction LineBody() {\\n  const [off, setOff] = useState(() =&gt; new Set());\\n  const [hov, setHov] = useState(null);\\n  const w = 680, h = 196, padT = 12, padB = 12, padL = 8, padR = 8, n = LINE_LABELS.length, max = 90000;\\n  const yAxisW = 40;\\n  const X = (i) =&gt; padL + (i / (n - 1)) * (w - padL - padR);\\n  const Y = (v) =&gt; padT + (1 - v / max) * (h - padT - padB);\\n  const smooth = (pts) =&gt; { let d = `M ${X(0)} ${Y(pts[0])}`; for (let i = 1; i &lt; n; i++) { const cx = (X(i - 1) + X(i)) / 2; d += ` C ${cx} ${Y(pts[i - 1])}, ${cx} ${Y(pts[i])}, ${X(i)} ${Y(pts[i])}`; } return d; };\\n  const toggle = (k) =&gt; setOff(s =&gt; { const x = new Set(s); x.has(k) ? x.delete(k) : x.add(k); return x; });\\n  const visible = LINE_SERIES.filter(s =&gt; !off.has(s.key));\\n  const xPct = (i) =&gt; (X(i) / w) * 100, yPct = (v) =&gt; (Y(v) / h) * 100;\\n  const yTicks = [90000, 60000, 30000, 0];\\n  return (\\n    \n\\n      \n\\n        {/* Y-axis labels */}\\n        \n\\n          {yTicks.map((v, i) =&gt; (\\n            {v === 0 ? \\\"0\\\" : (v / 1000) + \\\"K\\\"}&lt;\\/span&gt;\\n          ))}\\n        &lt;\\/div&gt;\\n        {/* Chart area */}\\n        \n setHov(null)}&gt;\\n          \\n            {yTicks.map((v, i) =&gt; )}\\n            {hov &amp;&amp; }\\n            {visible.map(s =&gt; )}\\n          &lt;\\/svg&gt;\\n          {visible.map(s =&gt; s.pts.map((v, i) =&gt; {\\n            const isHov = hov &amp;&amp; hov.s.key === s.key &amp;&amp; hov.i === i, dim = hov &amp;&amp; !isHov;\\n            return (\\n              \n setHov({ s, i })}\\n                style={{ position: \\\"absolute\\\", left: `${xPct(i)}%`, top: `${yPct(v)}%`, transform: \\\"translate(-50%, -50%)\\\", width: 20, height: 20, display: \\\"flex\\\", alignItems: \\\"center\\\", justifyContent: \\\"center\\\", cursor: \\\"pointer\\\", zIndex: isHov ? 4 : 2 }}&gt;\\n                \\n              &lt;\\/div&gt;\\n            );\\n          }))}\\n          {hov &amp;&amp; (\\n            \n n - 4 ? \\\"calc(-100% - 12px)\\\" : hov.i &lt; 3 ? \\\"12px\\\" : \\\"-50%\\\"}, calc(-100% - 14px))`, background: T.surface, border: `1px solid ${T.line}`, borderRadius: 10, boxShadow: T.shadow, padding: \\\"9px 12px\\\", whiteSpace: \\\"nowrap\\\", pointerEvents: \\\"none\\\", zIndex: 6 }}&gt;\\n              \n{hov.s.label}&lt;\\/div&gt;\\n              \n{fmt(hov.s.pts[hov.i])}&lt;\\/div&gt;\\n              {hov.i &gt; 0 &amp;&amp; (() =&gt; { const pct = (hov.s.pts[hov.i] - hov.s.pts[hov.i - 1]) / hov.s.pts[hov.i - 1] * 100; const up = pct &gt;= 0; return \n{up ?  : }{up ? \\\"+\\\" : \\\"\\\"}{pct.toFixed(1)}% from prev&lt;\\/div&gt;; })()}\\n              \n{LINE_LABELS[hov.i]}&lt;\\/div&gt;\\n            &lt;\\/div&gt;\\n          )}\\n        &lt;\\/div&gt;\\n      &lt;\\/div&gt;\\n      {/* X-axis labels */}\\n      \n\\n        {LINE_LABELS.map((label, i) =&gt; (\\n          \n{i % 3 === 0 ? label : \\\"\\\"}&lt;\\/div&gt;\\n        ))}\\n      &lt;\\/div&gt;\\n      \n\\n        {LINE_SERIES.map(s =&gt; {\\n          const isOff = off.has(s.key);\\n          return (\\n             toggle(s.key)} title={isOff ? \\\"Show series\\\" : \\\"Hide series\\\"} className=\\\"ax-press\\\"\\n              style={{ display: \\\"inline-flex\\\", alignItems: \\\"center\\\", gap: 6, padding: \\\"3px 9px\\\", borderRadius: 999, border: `1px solid ${isOff ? T.lineSoft : T.line}`, background: isOff ? \\\"transparent\\\" : T.canvas, cursor: \\\"pointer\\\", fontFamily: T.font, fontSize: 11.5, fontWeight: 500, color: isOff ? T.faint : T.body, transition: \\\"all .14s\\\" }}&gt;\\n              \\n              {s.label}&lt;\\/span&gt;\\n            &lt;\\/button&gt;\\n          );\\n        })}\\n      &lt;\\/div&gt;\\n    &lt;\\/div&gt;\\n  );\\n}\\nconst STACK_DATA = [[\\\"Jan\\\", 40, 25, 20], [\\\"Feb\\\", 35, 30, 15], [\\\"Mar\\\", 52, 22, 26], [\\\"Apr\\\", 30, 35, 18], [\\\"May\\\", 48, 28, 24], [\\\"Jun\\\", 58, 32, 28]];\\nconst STACK_SERIES = [\\n  { key: \\\"cloud\\\", label: \\\"Cloud\\\", color: T.viz.green },\\n  { key: \\\"onprem\\\", label: \\\"On-prem\\\", color: T.viz.mint },\\n  { key: \\\"saas\\\", label: \\\"SaaS\\\", color: T.viz.lilac },\\n];\\nfunction StackedBody() {\\n  const [off, setOff] = useState(() =&gt; new Set());\\n  const [segHov, setSegHov] = useState(null);\\n  const [tip, setTip] = useState(null);\\n  const toggle = (key) =&gt; setOff(s =&gt; { const n = new Set(s); n.has(key) ? n.delete(key) : n.add(key); return n; });\\n  const visSeries = STACK_SERIES.filter(s =&gt; !off.has(s.key));\\n  const yAxisW = 34;\\n  const allTotals = STACK_DATA.map(row =&gt; visSeries.reduce((sum, s) =&gt; sum + row[STACK_SERIES.findIndex(s2 =&gt; s2.key === s.key) + 1], 0));\\n  const rawMax = Math.max(...allTotals, 1);\\n  const yMax = Math.ceil(rawMax / 20) * 20;\\n  const yTicks = [yMax, yMax * 0.75, yMax * 0.5, yMax * 0.25, 0];\\n  const tipContent = tip &amp;&amp; segHov ? (() =&gt; {\\n    const row = STACK_DATA[segHov.col];\\n    const s = STACK_SERIES.find(s =&gt; s.key === segHov.key);\\n    const idx = STACK_SERIES.findIndex(s2 =&gt; s2.key === segHov.key);\\n    const val = row[idx + 1] * 86;\\n    const totalVis = visSeries.reduce((sum, ss) =&gt; sum + row[STACK_SERIES.findIndex(s2 =&gt; s2.key === ss.key) + 1], 0);\\n    const pct = (row[idx + 1] / (totalVis || 1) * 100).toFixed(1);\\n    return { label: s.label, color: s.color, val, pct, month: row[0] };\\n  })() : null;\\n  return (\\n    \n\\n      {tip &amp;&amp; tipContent &amp;&amp; \\n        \n{tipContent.month}&lt;\\/div&gt;\\n        \n{tipContent.label}&lt;\\/div&gt;\\n        \n{fmt(tipContent.val)}&lt;\\/div&gt;\\n        \n{tipContent.pct}% of total&lt;\\/div&gt;\\n      &lt;\\/FloatTip&gt;}\\n      \n\\n        {/* Y-axis */}\\n        \n\\n          {yTicks.map((v, i) =&gt; (\\n            {v === 0 ? \\\"0\\\" : v + \\\"K\\\"}&lt;\\/span&gt;\\n          ))}\\n        &lt;\\/div&gt;\\n        {/* Bars */}\\n        \n\\n          \n\\n            {yTicks.map((v, i) =&gt; (\\n              \n\\n            ))}\\n            {STACK_DATA.map((row, ci) =&gt; {\\n              const total = visSeries.reduce((sum, s) =&gt; sum + row[STACK_SERIES.findIndex(s2 =&gt; s2.key === s.key) + 1], 0);\\n              const colHov = segHov?.col === ci;\\n              const dim = segHov &amp;&amp; !colHov;\\n              return (\\n                \n\\n                  \n\\n                    {visSeries.map((s, si) =&gt; {\\n                      const val = row[STACK_SERIES.findIndex(s2 =&gt; s2.key === s.key) + 1];\\n                      const isFirst = si === 0, isLast = si === visSeries.length - 1;\\n                      const isHov = segHov?.col === ci &amp;&amp; segHov?.key === s.key;\\n                      return (\\n                        \n { setSegHov({ col: ci, key: s.key }); setTip({ x: e.clientX, y: e.clientY }); }}\\n                          onMouseMove={(e) =&gt; setTip({ x: e.clientX, y: e.clientY })}\\n                          onMouseLeave={() =&gt; { setSegHov(null); setTip(null); }}\\n                          style={{ flex: val, background: s.color, borderRadius: isFirst ? \\\"6px 6px 0 0\\\" : isLast ? \\\"0 0 6px 6px\\\" : 0, filter: isHov ? \\\"brightness(1.18)\\\" : \\\"none\\\", transition: \\\"filter .15s\\\", cursor: \\\"pointer\\\" }} /&gt;\\n                      );\\n                    })}\\n                  &lt;\\/div&gt;\\n                  {row[0]}&lt;\\/span&gt;\\n                &lt;\\/div&gt;\\n              );\\n            })}\\n          &lt;\\/div&gt;\\n        &lt;\\/div&gt;\\n      &lt;\\/div&gt;\\n      {/* Clickable legend */}\\n      \n\\n        {STACK_SERIES.map(s =&gt; {\\n          const isOff = off.has(s.key);\\n          return (\\n             toggle(s.key)} className=\\\"ax-press\\\"\\n              style={{ display: \\\"inline-flex\\\", alignItems: \\\"center\\\", gap: 6, padding: \\\"3px 9px\\\", borderRadius: 999, border: `1px solid ${isOff ? T.lineSoft : T.line}`, background: isOff ? \\\"transparent\\\" : T.canvas, cursor: \\\"pointer\\\", fontFamily: T.font, fontSize: 11.5, fontWeight: 500, color: isOff ? T.faint : T.body, transition: \\\"all .14s\\\" }}&gt;\\n              \\n              {s.label}&lt;\\/span&gt;\\n            &lt;\\/button&gt;\\n          );\\n        })}\\n      &lt;\\/div&gt;\\n    &lt;\\/div&gt;\\n  );\\n}\\nconst SEV = [[\\\"Critical\\\", 142, 100, SEVC.critical], [\\\"High\\\", 98, 70, SEVC.high], [\\\"Medium\\\", 76, 54, SEVC.medium], [\\\"Low\\\", 45, 32, SEVC.low], [\\\"Info\\\", 21, 15, SEVC.info]];\\nconst SEV_ASSETS = {\\n  Critical: [[\\\"PC-CURTIS-WILLIAMS\\\", \\\"CVE-2024-21412 \\u00b7 SmartScreen bypass\\\"], [\\\"srv-db-fin-04\\\", \\\"CVE-2024-3094 \\u00b7 xz-utils backdoor\\\"], [\\\"esx-infranginx-5567897\\\", \\\"CVE-2023-46604 \\u00b7 ActiveMQ RCE\\\"], [\\\"WIN-RUTHD\\\", \\\"CVE-2024-21413 \\u00b7 Outlook RCE\\\"]],\\n  High: [[\\\"macbook-pro-jdoe\\\", \\\"CVE-2024-23222 \\u00b7 WebKit type confusion\\\"], [\\\"azure-infra9274676\\\", \\\"CVE-2024-21401 \\u00b7 Entra ID elevation\\\"], [\\\"lablb-2918146-beta\\\", \\\"CVE-2024-1709 \\u00b7 ScreenConnect auth bypass\\\"]],\\n  Medium: [[\\\"iphone-asmith\\\", \\\"CVE-2024-23225 \\u00b7 kernel memory\\\"], [\\\"sepio-external3026786\\\", \\\"CVE-2024-0519 \\u00b7 V8 out-of-bounds\\\"]],\\n  Low: [[\\\"android-pixel-7\\\", \\\"CVE-2024-0039 \\u00b7 System component\\\"]],\\n  Info: [[\\\"win-marychasse\\\", \\\"Informational \\u00b7 TLS 1.0 enabled\\\"]],\\n};\\nfunction SeverityDrawer({ sev, close }) {\\n  const list = SEV_ASSETS[sev[0]] || [];\\n  return createPortal(&lt;&gt;\\n    \n\\n    \n\\n      \n\\n        \\n        \n\\n          \n{sev[0]} severity&lt;\\/div&gt;\\n          \n{sev[1]} open vulnerabilities \\u00b7 {list.length} assets shown&lt;\\/div&gt;\\n        &lt;\\/div&gt;\\n        &lt;\\/IconBtn&gt;\\n      &lt;\\/div&gt;\\n      \n\\n        {list.map(([host, cve], i) =&gt; (\\n          \n\\n            \n\\n              {host}&lt;\\/span&gt;\\n              {sev[0]}&lt;\\/span&gt;\\n            &lt;\\/div&gt;\\n            {cve}&lt;\\/span&gt;\\n          &lt;\\/div&gt;\\n        ))}\\n      &lt;\\/div&gt;\\n      \n\\n        View all {sev[1]} in Inventory&lt;\\/button&gt;\\n      &lt;\\/div&gt;\\n    &lt;\\/div&gt;\\n  &lt;\\/&gt;, document.body);\\n}\\nfunction SeverityBody() {\\n  const [hi, setHi] = useState(null);\\n  const [drill, setDrill] = useState(null);\\n  const [tip, setTip] = useState(null);\\n  const sevTotal = SEV.reduce((a, b) =&gt; a + b[1], 0);\\n  return (&lt;&gt;\\n    \n\\n      {SEV.map((b, i) =&gt; {\\n        const active = hi === i, dim = hi !== null &amp;&amp; !active;\\n        return (\\n          \n setDrill(b)} onMouseEnter={(e) =&gt; { setHi(i); setTip({ i, x: e.clientX, y: e.clientY }); }} onMouseMove={(e) =&gt; setTip({ i, x: e.clientX, y: e.clientY })} onMouseLeave={() =&gt; { setHi(null); setTip(null); }}\\n            style={{ display: \\\"flex\\\", alignItems: \\\"center\\\", gap: 12, opacity: dim ? 0.5 : 1, transition: \\\"opacity .15s\\\", cursor: \\\"pointer\\\" }}&gt;\\n            {b[0]}&lt;\\/span&gt;\\n            \n\n&lt;\\/div&gt;\\n            {active ? b[1] + \\\" open\\\" : b[1]}&lt;\\/span&gt;\\n          &lt;\\/div&gt;\\n        );\\n      })}\\n    &lt;\\/div&gt;\\n    {tip &amp;&amp; \n{SEV[tip.i][0]}&lt;\\/div&gt;\n{fmt(SEV[tip.i][1])}&lt;\\/div&gt;\n{Math.round(SEV[tip.i][1] / sevTotal * 100)}% of open findings&lt;\\/div&gt;&lt;\\/FloatTip&gt;}\\n    {drill &amp;&amp;  setDrill(null)} /&gt;}\\n  &lt;\\/&gt;);\\n}\\nconst ST_COLOR = { ok: T.viz.green, warn: T.viz.amber, err: T.red };\\n\\n/* ===== System Lifecycle (discovery cycle) ===== */\\nconst LIFECYCLE = [\\n  { name: \\\"Fetch\\\", pct: 100 }, { name: \\\"Clean\\\", pct: 100 }, { name: \\\"Correlate\\\", pct: 100 },\\n  { name: \\\"Enrich\\\", pct: 78 }, { name: \\\"Calculate\\\", pct: 0 },\\n];\\nfunction LifecycleBody() {\\n  const [tip, setTip] = useState(null);\\n  const done = LIFECYCLE.filter(s =&gt; s.pct === 100).length, total = LIFECYCLE.length;\\n  const overall = Math.round(LIFECYCLE.reduce((a, s) =&gt; a + s.pct, 0) / total);\\n  const r = 42, sw = 11, C = 2 * Math.PI * r, dash = (overall / 100) * C;\\n  return (\\n    \n\\n      {tip &amp;&amp; \n{LIFECYCLE[tip.i].name} stage&lt;\\/div&gt;\n{LIFECYCLE[tip.i].pct &gt; 0 ? LIFECYCLE[tip.i].pct + \\\"% complete\\\" : \\\"Not started\\\"}&lt;\\/div&gt;&lt;\\/FloatTip&gt;}\\n      \n\\n        \n\\n          \\n            \\n            \\n          &lt;\\/svg&gt;\\n          \n\\n            {done}/{total}&lt;\\/span&gt;\\n            Stages&lt;\\/span&gt;\\n          &lt;\\/div&gt;\\n        &lt;\\/div&gt;\\n        \n\\n          {LIFECYCLE.map((s, i) =&gt; {\\n            const c = s.pct === 100 ? T.viz.green : s.pct &gt; 0 ? T.blue : T.bg40;\\n            return (\\n              \n setTip({ i, x: e.clientX, y: e.clientY })} onMouseMove={(e) =&gt; setTip({ i, x: e.clientX, y: e.clientY })} onMouseLeave={() =&gt; setTip(null)} style={{ display: \\\"flex\\\", alignItems: \\\"center\\\", gap: 10, cursor: \\\"default\\\" }}&gt;\\n                {s.name}&lt;\\/span&gt;\\n                \n\\n                  \n\\n                &lt;\\/div&gt;\\n                 0 ? T.blue : T.bg40, ...tnum }}&gt;{s.pct &gt; 0 ? s.pct + \\\"%\\\" : \\\"\\u2014\\\"}&lt;\\/span&gt;\\n              &lt;\\/div&gt;\\n            );\\n          })}\\n        &lt;\\/div&gt;\\n      &lt;\\/div&gt;\\n      \n\\n        {[[\\\"Cycle started\\\", \\\"09:00:04\\\"], [\\\"Duration\\\", \\\"00:42:18\\\"], [\\\"Next cycle\\\", \\\"13:17:42\\\"]].map(([k, v], i) =&gt; (\\n          \n\\n            \n{k}&lt;\\/div&gt;\\n            \n{v}&lt;\\/div&gt;\\n          &lt;\\/div&gt;\\n        ))}\\n      &lt;\\/div&gt;\\n    &lt;\\/div&gt;\\n  );\\n}\\n\\n/* ===== Discovery Log ===== */\\nconst DISC_PHASES = [[\\\"Fetch\\\", T.viz.green], [\\\"Clean\\\", T.viz.mint], [\\\"Correlate\\\", T.viz.lilac], [\\\"Enrich\\\", T.viz.lilacPale], [\\\"Calculate\\\", T.viz.amber], [\\\"Save\\\", T.viz.orange]];\\nconst DISCOVERY = [\\n  { started: \\\"Jun 15, 09:00\\\", completed: \\\"Jun 15, 09:35\\\", duration: \\\"35min 22sec\\\", ph: [40, 12, 18, 10, 12, 8] },\\n  { started: \\\"Jun 14, 09:00\\\", completed: \\\"Jun 14, 09:35\\\", duration: \\\"35min 59sec\\\", ph: [38, 14, 17, 11, 12, 8] },\\n  { started: \\\"Jun 13, 09:00\\\", completed: \\\"Jun 13, 09:35\\\", duration: \\\"35min 29sec\\\", ph: [41, 11, 18, 10, 12, 8] },\\n  { started: \\\"Jun 12, 09:00\\\", completed: \\\"Jun 12, 09:35\\\", duration: \\\"35min 11sec\\\", ph: [39, 13, 17, 11, 12, 8] },\\n  { started: \\\"Jun 11, 09:00\\\", completed: \\\"Jun 11, 09:35\\\", duration: \\\"35min 58sec\\\", ph: [44, 12, 16, 9, 11, 8] },\\n  { started: \\\"Jun 10, 09:00\\\", completed: \\\"Jun 10, 09:30\\\", duration: \\\"30min 54sec\\\", ph: [36, 12, 18, 12, 14, 8] },\\n  { started: \\\"Jun 9, 09:00\\\", completed: \\\"Jun 9, 09:34\\\", duration: \\\"34min 02sec\\\", ph: [37, 13, 17, 11, 13, 9] },\\n  { started: \\\"Jun 8, 09:00\\\", completed: \\\"Jun 8, 09:31\\\", duration: \\\"31min 38sec\\\", ph: [40, 12, 17, 10, 13, 8] },\\n];\\nfunction DiscoveryBody() {\\n  const [hi, setHi] = useState(null);\\n  const [tip, setTip] = useState(null);\\n  const cols = \\\"minmax(70px, 1.6fr) 104px 92px\\\";\\n  const durToSec = (s) =&gt; { let t = 0; const m = s.match(/(\\\\d+)\\\\s*min/), sec = s.match(/(\\\\d+)\\\\s*sec/); if (m) t += +m[1] * 60; if (sec) t += +sec[1]; return t; };\\n  const fmtDur = (x) =&gt; { x = Math.round(x); const m = Math.floor(x / 60), s = x % 60; return m &gt; 0 ? `${m}min ${s}sec` : `${s}sec`; };\\n  return (\\n    \n\\n      \n\\n        {[\\\"Latest Discoveries\\\", \\\"Started\\\", \\\"Duration\\\"].map((c, i) =&gt; (\\n          {c}&lt;\\/span&gt;\\n        ))}\\n      &lt;\\/div&gt;\\n      \n\\n        {DISCOVERY.map((d, i) =&gt; (\\n          \n setHi(i)} onMouseLeave={() =&gt; { setHi(null); setTip(null); }}\\n            style={{ display: \\\"grid\\\", gridTemplateColumns: cols, gap: 12, alignItems: \\\"center\\\", padding: \\\"7px 6px\\\", borderBottom: i &lt; DISCOVERY.length - 1 ? `1px solid ${T.hair}` : \\\"none\\\", background: hi === i ? T.canvas : \\\"transparent\\\", borderRadius: 6, transition: \\\"background .12s\\\" }}&gt;\\n            \n\\n              {d.ph.map((w, j) =&gt;  setTip({ d, j, x: e.clientX, y: e.clientY })} onMouseMove={(e) =&gt; setTip({ d, j, x: e.clientX, y: e.clientY })}\\n                style={{ width: `${w}%`, height: \\\"100%\\\", background: DISC_PHASES[j][1], cursor: \\\"pointer\\\" }} /&gt;)}\\n            &lt;\\/div&gt;\\n            {d.started}&lt;\\/span&gt;\\n            {d.duration}&lt;\\/span&gt;\\n          &lt;\\/div&gt;\\n        ))}\\n      &lt;\\/div&gt;\\n      {tip &amp;&amp; \\n        \n{DISC_PHASES[tip.j][0]}&lt;\\/div&gt;\\n        \n{fmtDur(durToSec(tip.d.duration) * tip.d.ph[tip.j] / 100)}&lt;\\/div&gt;\\n        \n{tip.d.ph[tip.j]}% of cycle&lt;\\/div&gt;\\n      &lt;\\/FloatTip&gt;}\\n    &lt;\\/div&gt;\\n  );\\n}\\n\\n/* ===== Adapter Connections (status + logo coin + preview) ===== */\\nconst ADAPTER_CONN = [\\n  { brand: \\\"crowdstrike\\\", name: \\\"CrowdStrike\\\", st: \\\"ok\\\", desc: \\\"9,120 devices \\u00b7 synced 4m ago\\\" },\\n  { brand: \\\"aws\\\", name: \\\"Amazon Web Services\\\", st: \\\"ok\\\", desc: \\\"12,400 assets \\u00b7 synced 6m ago\\\" },\\n  { brand: \\\"azure\\\", name: \\\"Microsoft Azure\\\", st: \\\"ok\\\", desc: \\\"22,097 assets \\u00b7 synced 5m ago\\\" },\\n  { brand: \\\"okta\\\", name: \\\"Okta\\\", st: \\\"ok\\\", desc: \\\"9,870 users \\u00b7 synced 8m ago\\\" },\\n  { short: \\\"Jm\\\", color: \\\"#3B3B3B\\\", name: \\\"Jamf Pro\\\", st: \\\"err\\\", desc: \\\"Connection timeout \\u2014 check credentials\\\" },\\n  { short: \\\"now\\\", color: \\\"#2E8B57\\\", name: \\\"ServiceNow\\\", st: \\\"warn\\\", desc: \\\"Rate limited \\u00b7 retrying\\\" },\\n  { brand: \\\"googlecloud\\\", name: \\\"Google Cloud\\\", st: \\\"ok\\\", desc: \\\"9,055 assets \\u00b7 synced 7m ago\\\" },\\n  { brand: \\\"vmware\\\", name: \\\"VMware vCenter\\\", st: \\\"ok\\\", desc: \\\"4,310 VMs \\u00b7 synced 11m ago\\\" },\\n];\\nconst ST_LABEL = { ok: \\\"Connected\\\", warn: \\\"Degraded\\\", err: \\\"Error\\\" };\\nfunction AdapterCoin({ a }) {\\n  if (a.brand) return ;\\n  return {a.short}&lt;\\/span&gt;;\\n}\\nfunction AdaptersBody() {\\n  const connected = ADAPTER_CONN.filter(a =&gt; a.st === \\\"ok\\\").length;\\n  const attention = ADAPTER_CONN.length - connected;\\n  return (\\n    \n\\n      \n\\n        {connected}&lt;\\/span&gt;\\n        connected sources&lt;\\/span&gt;\\n        {attention &gt; 0 &amp;&amp; {attention} need attention&lt;\\/span&gt;}\\n      &lt;\\/div&gt;\\n      \n\\n        {ADAPTER_CONN.map((a, i) =&gt; {\\n          const ring = ST_COLOR[a.st];\\n          return (\\n            \n\\n              \\n              \n\\n                \n{a.name}&lt;\\/div&gt;\\n                \n\\n                  \\n                  {a.desc}&lt;\\/span&gt;\\n                &lt;\\/div&gt;\\n              &lt;\\/div&gt;\\n            &lt;\\/div&gt;\\n          );\\n        })}\\n      &lt;\\/div&gt;\\n    &lt;\\/div&gt;\\n  );\\n}\\nconst HEALTH_OK_BRANDS = [\\\"crowdstrike\\\", \\\"aws\\\", \\\"azure\\\", \\\"okta\\\", \\\"googlecloud\\\", \\\"vmware\\\"];\\nfunction HealthOkBody() {\\n  return (\\n    \n\\n      \n\\n        33&lt;\\/span&gt;\\n        adapters syncing successfully&lt;\\/span&gt;\\n      &lt;\\/div&gt;\\n      \n\\n        {HEALTH_OK_BRANDS.map((b, i) =&gt; )}\\n        +27&lt;\\/span&gt;\\n      &lt;\\/div&gt;\\n      \n\\n         100% healthy \\u00b7 last full sync 4m ago\\n      &lt;\\/div&gt;\\n    &lt;\\/div&gt;\\n  );\\n}\\nconst HEALTH_FAIL = [\\n  { short: \\\"Jm\\\", color: \\\"#3B3B3B\\\", name: \\\"Jamf Pro\\\", reason: \\\"Connection timeout \\u2014 check credentials\\\" },\\n  { short: \\\"now\\\", color: \\\"#2E8B57\\\", name: \\\"ServiceNow\\\", reason: \\\"Rate limited \\u00b7 retrying\\\" },\\n];\\nfunction HealthFailBody() {\\n  return (\\n    \n\\n      \n\\n        {HEALTH_FAIL.length}&lt;\\/span&gt;\\n        adapters need attention&lt;\\/span&gt;\\n      &lt;\\/div&gt;\\n      \n\\n        {HEALTH_FAIL.map((a, i) =&gt; (\\n          \n\\n            {a.short}&lt;\\/span&gt;\\n            \n\\n              \n{a.name}&lt;\\/div&gt;\\n              \n{a.reason}&lt;\\/div&gt;\\n            &lt;\\/div&gt;\\n            Fix&lt;\\/button&gt;\\n          &lt;\\/div&gt;\\n        ))}\\n      &lt;\\/div&gt;\\n    &lt;\\/div&gt;\\n  );\\n}\\n/* ===== Cost Optimization dashboard ===== */\\nconst fmtMoney = (n) =&gt; n.toLocaleString(\\\"en-US\\\");\\nfunction CostKPI({ value, unit }) {\\n  return (\\n    \n\\n      {value}&lt;\\/span&gt;\\n      {unit &amp;&amp; {unit}&lt;\\/span&gt;}\\n    &lt;\\/div&gt;\\n  );\\n}\\nfunction HBarList({ rows, accent, prefix, avatar, appLogo }) {\\n  const max = Math.max(...rows.map(r =&gt; r[1]), 1);\\n  const totalVal = rows.reduce((a, r) =&gt; a + r[1], 0) || 1;\\n  const [tip, setTip] = useState(null);\\n  return (\\n    \n\\n      {rows.map(([label, val], i) =&gt; {\\n        const pct = Math.max(4, (val / max) * 100), inside = pct &gt; 24;\\n        return (\\n          \n setTip({ i, x: e.clientX, y: e.clientY })} onMouseMove={(e) =&gt; setTip({ i, x: e.clientX, y: e.clientY })} onMouseLeave={() =&gt; setTip(null)}\\n            style={{ display: \\\"flex\\\", alignItems: \\\"center\\\", gap: 12, cursor: \\\"default\\\" }}&gt;\\n            {avatar &amp;&amp; }{appLogo &amp;&amp; }{label}&lt;\\/span&gt;&lt;\\/span&gt;\\n            \n\\n              \n\\n                {inside &amp;&amp; {prefix || \\\"\\\"}{fmtMoney(val)}&lt;\\/span&gt;}\\n              &lt;\\/div&gt;\\n              {!inside &amp;&amp; {prefix || \\\"\\\"}{fmtMoney(val)}&lt;\\/span&gt;}\\n            &lt;\\/div&gt;\\n          &lt;\\/div&gt;\\n        );\\n      })}\\n      {tip &amp;&amp; \\n        \n{rows[tip.i][0]}&lt;\\/div&gt;\\n        \n{prefix || \\\"\\\"}{fmtMoney(rows[tip.i][1])}&lt;\\/div&gt;\\n        \n{(rows[tip.i][1] / totalVal * 100).toFixed(1)}% of shown total&lt;\\/div&gt;\\n      &lt;\\/FloatTip&gt;}\\n    &lt;\\/div&gt;\\n  );\\n}\\nconst COST_CATEGORY = [[\\\"Productivity\\\", 141993], [\\\"Video Conference\\\", 55928], [\\\"File Sharing\\\", 52943], [\\\"Authentication\\\", 11440], [\\\"CRM\\\", 9870]];\\nconst COST_APP = [[\\\"Zoom\\\", 55928], [\\\"Miro\\\", 52885], [\\\"Dropbox\\\", 50431], [\\\"Salesforce\\\", 43176], [\\\"Slack\\\", 38420]];\\nconst COST_TOPLIC = [[\\\"Zoom One Pro\\\", 70800], [\\\"Google WS Ent. Starter\\\", 27450], [\\\"Google WS Ent. Standard\\\", 12985], [\\\"Google WS Business\\\", 8640], [\\\"Microsoft 365 G3 GCC\\\", 1930]];\\nconst COST_USAGE = [[\\\"aaron.church@demo.local\\\", 29], [\\\"aaron.daniels@demo.local\\\", 29], [\\\"ada.pires@demo.local\\\", 29], [\\\"adelaide.gercak@demo.local\\\", 29], [\\\"adrian.williams@demo.local\\\", 29]];\\nconst COST_RENEWALS = [\\n  { app: \\\"Office365\\\", name: \\\"Microsoft 365 E5\\\", date: \\\"2026-07-06\\\", cost: \\\"3,175.50\\\", term: \\\"Yearly\\\", unit: \\\"54.75\\\" },\\n  { app: \\\"Office365\\\", name: \\\"Microsoft Power Aut\\u2026\\\", date: \\\"2026-08-07\\\", cost: \\\"6,518.75\\\", term: \\\"Yearly\\\", unit: \\\"37.25\\\" },\\n];\\nfunction CostExpAllBody() { return ; }\\nfunction CostLicAllBody() { return ; }\\nfunction CostExp2024Body() { return ; }\\nfunction CostLicTotalBody() { return ; }\\nfunction CostCategoryBody() { return ; }\\nfunction CostAppBody() { return ; }\\nfunction CostTopLicBody() { return ; }\\nfunction CostUsageBody() { return ; }\\nfunction CostRenewalsBody() {\\n  const cols = [\\n    { label: \\\"Application\\\", render: r =&gt; {r.app}&lt;\\/span&gt;&lt;\\/span&gt; },\\n    { label: \\\"Name\\\", render: r =&gt; {r.name}&lt;\\/span&gt; },\\n    { label: \\\"Renewal Date\\\", render: r =&gt; {r.date}&lt;\\/span&gt; },\\n    { label: \\\"Total Cost\\\", align: \\\"right\\\", render: r =&gt; ${r.cost}&lt;\\/span&gt; },\\n    { label: \\\"Term\\\", render: r =&gt; {r.term}&lt;\\/span&gt; },\\n    { label: \\\"Unit\\\", align: \\\"right\\\", render: r =&gt; ${r.unit}&lt;\\/span&gt; },\\n  ];\\n  return (\\n    \n\\n      \n\\n        \\n          \\n            {cols.map((c, i) =&gt; {c.label}&lt;\\/th&gt;)}\\n          &lt;\\/tr&gt;\\n        &lt;\\/thead&gt;\\n        \\n          {COST_RENEWALS.map((r, ri) =&gt; (\\n            \\n              {cols.map((c, i) =&gt; {c.render(r)}&lt;\\/td&gt;)}\\n            &lt;\\/tr&gt;\\n          ))}\\n        &lt;\\/tbody&gt;\\n      &lt;\\/table&gt;\\n    &lt;\\/div&gt;\\n  );\\n}\\nfunction ResetViewBtn({ disabled, onReset }) {\\n  const [h, setH] = useState(false);\\n  return (\\n     setH(true)} onMouseLeave={() =&gt; setH(false)}\\n      title={disabled ? \\\"Layout is at its default\\\" : \\\"Restore the default tile layout\\\"}\\n      style={{ display: \\\"inline-flex\\\", alignItems: \\\"center\\\", gap: 6, height: 30, padding: \\\"0 13px\\\", borderRadius: 999, fontFamily: T.font, fontSize: 13, fontWeight: 600, cursor: disabled ? \\\"default\\\" : \\\"pointer\\\", border: `1px solid ${disabled ? T.lineSoft : h ? T.lineStrong : T.line}`, background: disabled ? \\\"transparent\\\" : h ? T.surface2 : T.control, color: disabled ? T.faint : T.body, transition: \\\"all .14s\\\" }}&gt;\\n       Reset view\\n    &lt;\\/button&gt;\\n  );\\n}\\n\\nconst TILE_META = {\\n  line: { eyebrow: \\\"Activity\\\", title: \\\"Device Discovery Over Time\\\", Body: LineBody },\\n  donut: { eyebrow: \\\"Composition\\\", title: \\\"Windows Distribution\\\", Body: DonutBody },\\n  lifecycle: { eyebrow: \\\"Pipeline\\\", title: \\\"System Lifecycle\\\", Body: LifecycleBody },\\n  discovery: { eyebrow: \\\"Activity\\\", title: \\\"Discovery Log\\\", Body: DiscoveryBody },\\n  adapters: { eyebrow: \\\"Connections\\\", title: \\\"Adapter Connections\\\", Body: AdaptersBody },\\n  stacked: { eyebrow: \\\"Trend\\\", title: \\\"Asset Growth by Category\\\", Body: StackedBody, footer: 12.4%&lt;\\/Delta&gt; },\\n  severity: { eyebrow: \\\"Risk\\\", title: \\\"Vulnerabilities by Severity\\\", Body: SeverityBody, footer: 18 resolved&lt;\\/Delta&gt; },\\n  healthOk: { eyebrow: \\\"Adapters\\\", title: \\\"Adapter Health \\u00b7 Successful\\\", Body: HealthOkBody },\\n  healthFail: { eyebrow: \\\"Adapters\\\", title: \\\"Adapter Health \\u00b7 Attention\\\", Body: HealthFailBody },\\n  costExpAll: { eyebrow: \\\"Spend\\\", title: \\\"Total Expenses (All Time)\\\", Body: CostExpAllBody },\\n  costExp2024: { eyebrow: \\\"Spend\\\", title: \\\"Total Expenses (2024)\\\", Body: CostExp2024Body },\\n  costLicAll: { eyebrow: \\\"Licenses\\\", title: \\\"Total License Cost (All Time)\\\", Body: CostLicAllBody },\\n  costLicTotal: { eyebrow: \\\"Licenses\\\", title: \\\"Total License Cost\\\", Body: CostLicTotalBody },\\n  costRenewals: { eyebrow: \\\"Renewals\\\", title: \\\"Upcoming Renewals (next 90 days)\\\", Body: CostRenewalsBody, footer: View all results&lt;\\/a&gt;, noPad: true },\\n  costCategory: { eyebrow: \\\"Spend\\\", title: \\\"Expenses by Category (2024)\\\", Body: CostCategoryBody },\\n  costApp: { eyebrow: \\\"Spend\\\", title: \\\"Expenses by App (2024)\\\", Body: CostAppBody },\\n  costTopLic: { eyebrow: \\\"Licenses\\\", title: \\\"Most Expensive Licenses (2024)\\\", Body: CostTopLicBody },\\n  costUsage: { eyebrow: \\\"Usage\\\", title: \\\"Azure AD Logons \\u00b7 last 30 days\\\", Body: CostUsageBody },\\n};\\n\\n/* ============ resizable grid (corner drag, neighbors reflow) ============ */\\nconst GRID_COLS = 12, ROW_UNIT = 40, GAP = 16;\\nconst INITIAL_TILES = [\\n  { id: \\\"line\\\", w: 8, h: 7 }, { id: \\\"donut\\\", w: 4, h: 7 },\\n  { id: \\\"lifecycle\\\", w: 5, h: 7 }, { id: \\\"discovery\\\", w: 7, h: 7 },\\n  { id: \\\"adapters\\\", w: 7, h: 6 }, { id: \\\"severity\\\", w: 5, h: 6 },\\n  { id: \\\"healthOk\\\", w: 6, h: 5 }, { id: \\\"healthFail\\\", w: 6, h: 5 },\\n  { id: \\\"stacked\\\", w: 12, h: 5 },\\n];\\nconst COST_TILES = [\\n  { id: \\\"costExpAll\\\", w: 3, h: 4 }, { id: \\\"costExp2024\\\", w: 3, h: 4 }, { id: \\\"costLicAll\\\", w: 3, h: 4 }, { id: \\\"costLicTotal\\\", w: 3, h: 4 },\\n  { id: \\\"costRenewals\\\", w: 12, h: 6 },\\n  { id: \\\"costCategory\\\", w: 6, h: 6 }, { id: \\\"costApp\\\", w: 6, h: 6 },\\n  { id: \\\"costTopLic\\\", w: 6, h: 6 }, { id: \\\"costUsage\\\", w: 6, h: 6 },\\n];\\nconst DASH_TILESETS = { \\\"Cost Optimization\\\": COST_TILES };\\nfunction DashboardGrid({ tileSet = INITIAL_TILES }) {\\n  const [tiles, setTiles] = useState(tileSet);\\n  const [hoverId, setHoverId] = useState(null);\\n  const [resizingId, setResizingId] = useState(null);\\n  const [drag, setDrag] = useState(null);\\n  const dragId = drag ? drag.id : null;\\n  const ref = useRef(null);\\n  const tileEls = useRef({});\\n  const justDragged = useRef(false);\\n\\n  const startDrag = (e, id, immediate) =&gt; {\\n    if (e.button || (e.target.closest &amp;&amp; (e.target.closest(\\\"[data-resize]\\\") || e.target.closest(\\\"button\\\")))) return;\\n    const startX = e.clientX, startY = e.clientY;\\n    let dragging = false;\\n    const begin = (cx, cy) =&gt; {\\n      const el = tileEls.current[id]; if (!el) return;\\n      const rect = el.getBoundingClientRect();\\n      dragging = true;\\n      setDrag({ id, x: cx, y: cy, ox: cx - rect.left, oy: cy - rect.top, w: rect.width, h: rect.height });\\n      document.body.style.userSelect = \\\"none\\\";\\n    };\\n    const timer = immediate ? null : setTimeout(() =&gt; begin(startX, startY), 300);\\n    const onMove = (ev) =&gt; {\\n      if (!dragging) {\\n        const moved = Math.abs(ev.clientX - startX) &gt; (immediate ? 4 : 8) || Math.abs(ev.clientY - startY) &gt; (immediate ? 4 : 8);\\n        if (!moved) return;\\n        if (immediate) begin(ev.clientX, ev.clientY); else { end(); return; }\\n        if (!dragging) return;\\n      }\\n      setDrag(d =&gt; d ? { ...d, x: ev.clientX, y: ev.clientY } : d);\\n      for (const tid in tileEls.current) {\\n        const el = tileEls.current[tid];\\n        if (!el || tid === id) continue;\\n        const r = el.getBoundingClientRect();\\n        if (ev.clientX &gt;= r.left &amp;&amp; ev.clientX &lt;= r.right &amp;&amp; ev.clientY &gt;= r.top &amp;&amp; ev.clientY &lt;= r.bottom) {\\n          setTiles(ts =&gt; { const from = ts.findIndex(x =&gt; x.id === id), to = ts.findIndex(x =&gt; x.id === tid); if (from &lt; 0 || to &lt; 0 || from === to) return ts; const n = ts.slice(); const [mv] = n.splice(from, 1); n.splice(to, 0, mv); return n; });\\n          break;\\n        }\\n      }\\n    };\\n    const end = () =&gt; { clearTimeout(timer); if (dragging) { justDragged.current = true; setTimeout(() =&gt; { justDragged.current = false; }, 60); } dragging = false; setDrag(null); document.body.style.userSelect = \\\"\\\"; window.removeEventListener(\\\"pointermove\\\", onMove); window.removeEventListener(\\\"pointerup\\\", end); };\\n    window.addEventListener(\\\"pointermove\\\", onMove); window.addEventListener(\\\"pointerup\\\", end);\\n  };\\n\\n  const startResize = (e, id) =&gt; {\\n    e.preventDefault(); e.stopPropagation();\\n    setResizingId(id);\\n    const rect = ref.current.getBoundingClientRect();\\n    const colW = (rect.width - GAP * (GRID_COLS - 1)) / GRID_COLS;\\n    const t = tiles.find(x =&gt; x.id === id);\\n    const startWpx = t.w * colW + (t.w - 1) * GAP;\\n    const startHpx = t.h * ROW_UNIT + (t.h - 1) * GAP;\\n    const sx = e.clientX, sy = e.clientY;\\n    const onMove = (ev) =&gt; {\\n      let w = Math.round((startWpx + (ev.clientX - sx) + GAP) / (colW + GAP));\\n      let h = Math.round((startHpx + (ev.clientY - sy) + GAP) / (ROW_UNIT + GAP));\\n      w = Math.max(3, Math.min(GRID_COLS, w));\\n      h = Math.max(4, Math.min(14, h));\\n      setTiles(ts =&gt; ts.map(x =&gt; x.id === id ? { ...x, w, h } : x));\\n    };\\n    const onUp = () =&gt; { setResizingId(null); document.body.style.cursor = \\\"\\\"; window.removeEventListener(\\\"mousemove\\\", onMove); window.removeEventListener(\\\"mouseup\\\", onUp); };\\n    document.body.style.cursor = \\\"nwse-resize\\\";\\n    window.addEventListener(\\\"mousemove\\\", onMove); window.addEventListener(\\\"mouseup\\\", onUp);\\n  };\\n\\n  const isDefault = JSON.stringify(tiles) === JSON.stringify(tileSet);\\n  return (\\n    &lt;&gt;\\n      \n\\n         setTiles(tileSet)} /&gt;\\n      &lt;\\/div&gt;\\n    \n\\n      {tiles.map((t, ti) =&gt; {\\n        const m = TILE_META[t.id];\\n        const isHover = hoverId === t.id, isResizing = resizingId === t.id, isDragging = dragId === t.id, anyDrag = dragId !== null;\\n        return (\\n          \n (tileEls.current[t.id] = el)}\\n            onPointerDown={(e) =&gt; startDrag(e, t.id)}\\n            onClickCapture={(e) =&gt; { if (justDragged.current) { e.stopPropagation(); justDragged.current = false; } }}\\n            onMouseEnter={() =&gt; setHoverId(t.id)} onMouseLeave={() =&gt; setHoverId(null)}\\n            style={{ gridColumn: `span ${t.w}`, gridRow: `span ${t.h}`, position: \\\"relative\\\", minWidth: 0, zIndex: 1 }}&gt;\\n            {isDragging ? (\\n              \n\\n            ) : (&lt;&gt;\\n            \n\\n              \n { e.stopPropagation(); startDrag(e, t.id, true); }} title=\\\"Drag to move\\\" style={{ padding: \\\"13px 20px 12px\\\", borderBottom: `1px solid ${T.hair}`, display: \\\"flex\\\", alignItems: \\\"center\\\", gap: 8, cursor: \\\"grab\\\" }}&gt;\\n                \n\\n                  \n{m.eyebrow}&lt;\\/div&gt;\\n                  \n{m.title}&lt;\\/div&gt;\\n                &lt;\\/div&gt;\\n                &lt;\\/IconBtn&gt;\\n              &lt;\\/div&gt;\\n              \n&lt;\\/div&gt;\\n              {m.footer &amp;&amp; \n{m.footer}&lt;\\/div&gt;}\\n            &lt;\\/div&gt;\\n            \n startResize(e, t.id)} data-resize title=\\\"Drag to resize\\\"\\n              style={{ position: \\\"absolute\\\", right: 0, bottom: 0, width: 20, height: 20, cursor: \\\"nwse-resize\\\", display: \\\"flex\\\", alignItems: \\\"flex-end\\\", justifyContent: \\\"flex-end\\\", padding: 4, opacity: isHover || isResizing ? 1 : 0, transition: \\\"opacity .15s\\\" }}&gt;\\n              &lt;\\/svg&gt;\\n            &lt;\\/div&gt;\\n            &lt;\\/&gt;)}\\n          &lt;\\/div&gt;\\n        );\\n      })}\\n    &lt;\\/div&gt;\\n    {drag &amp;&amp; (() =&gt; { const m = TILE_META[drag.id]; return createPortal(\\n      \n\\n        \n\\n          \n\\n            \n\\n              \n{m.eyebrow}&lt;\\/div&gt;\\n              \n{m.title}&lt;\\/div&gt;\\n            &lt;\\/div&gt;\\n            &lt;\\/span&gt;\\n          &lt;\\/div&gt;\\n          \nDrop to reorder&lt;\\/div&gt;\\n        &lt;\\/div&gt;\\n      &lt;\\/div&gt;, document.body); })()}\\n    &lt;\\/&gt;\\n  );\\n}\\n\\n/* ============ Assets table view (real device schema) ============ */\\nconst ADAPTERS = {\\n  aws_adapter: { brand: \\\"aws\\\" }, active_directory_adapter: { brand: \\\"active_directory\\\" },\\n  crowd_strike_adapter: { brand: \\\"crowdstrike\\\" }, google_mdm_adapter: { brand: \\\"googlecloud\\\" },\\n  esx_adapter: { brand: \\\"vmware\\\" }, sentinelone_adapter: { brand: \\\"sentinelone\\\" },\\n  service_now_adapter: { brand: \\\"service_now\\\" }, epo_adapter: { brand: \\\"epo\\\" },\\n  paloalto_panorama_adapter: { brand: \\\"paloalto\\\" }, cisco_meraki_adapter: { brand: \\\"cisco_meraki\\\" },\\n  cisco_ise_adapter: { brand: \\\"cisco_ise\\\" }, cisco_adapter: { brand: \\\"cisco\\\" },\\n  tanium_adapter: { brand: \\\"tanium\\\" }, tanium_asset_adapter: { brand: \\\"tanium\\\" },\\n  claroty_adapter: { brand: \\\"claroty\\\" }, counter_act_adapter: { brand: \\\"forescout\\\" },\\n  tenable_security_center_adapter: { brand: \\\"tenable\\\" }, zoom_adapter: { brand: \\\"zoom\\\" },\\n  checkpoint_r80_adapter: { brand: \\\"checkpoint\\\" }, cylance_adapter: { brand: \\\"cylance\\\" },\\n  chef_adapter: { brand: \\\"chef\\\" }, axonius_network_inspector_adapter: { short: \\\"NP\\\", color: \\\"#1C1D1F\\\" },\\n};\\nfunction AdapterAvatar({ k, size = 32 }) {\\n  const a = ADAPTERS[k] || { short: k.slice(0, 2).toUpperCase(), color: \\\"#939598\\\" };\\n  if (a.brand) return ;\\n  return \n 28 ? 11 : 9, fontWeight: 700, color: a.color }}&gt;{a.short}&lt;\\/div&gt;;\\n}\\nfunction AdapterStack({ list }) {\\n  const shown = list.slice(0, 3), extra = list.length - shown.length;\\n  return (\\n    \\n      \\n      {shown.map((k, i) =&gt; &lt;\\/span&gt;)}\\n      {extra &gt; 0 &amp;&amp; +{extra}&lt;\\/span&gt;}\\n    &lt;\\/span&gt;\\n  );\\n}\\n/* OS category icons */\\nfunction OsIcon({ os }) {\\n  const c = { Windows: \\\"#0078D4\\\", Linux: \\\"#1C1D1F\\\", \\\"OS X\\\": \\\"#555\\\", iOS: \\\"#111\\\", Android: \\\"#3DDC84\\\", VMWare: \\\"#607078\\\" }[os] || T.faint;\\n  const mc = T.isLight ? \\\"#1B2030\\\" : \\\"#D6DAE6\\\"; // monochrome marks adapt to theme\\n  const g = {\\n    Windows: &lt;\\/svg&gt;,\\n    \\\"OS X\\\": &lt;\\/svg&gt;,\\n    iOS: &lt;\\/svg&gt;,\\n    Android: &lt;\\/svg&gt;,\\n    Linux: &lt;\\/svg&gt;,\\n    VMWare: vm&lt;\\/span&gt;,\\n  }[os];\\n  if (!os) return \\u2014&lt;\\/span&gt;;\\n  return {g || }&lt;\\/span&gt;{os}&lt;\\/span&gt;;\\n}\\nconst DEVICES = [\\n  { name: \\\"PC-CURTIS-WILLIAMS\\\", host: \\\"PC-CURTIS-WILLIAMS.demo.local\\\", os: \\\"Windows\\\", ip: \\\"10.0.49.148\\\", mac: \\\"88:53:2E:12:45:C4\\\", seen: \\\"2026-06-08 09:34\\\", tags: [\\\"Corporate\\\", \\\"Managed\\\"], adapters: [\\\"active_directory_adapter\\\", \\\"crowd_strike_adapter\\\", \\\"epo_adapter\\\", \\\"google_mdm_adapter\\\", \\\"tanium_adapter\\\", \\\"sentinelone_adapter\\\", \\\"cisco_ise_adapter\\\"] },\\n  { name: \\\"infranginx-5567897-stg\\\", host: \\\"esx-infranginx-5567897-stg.demo.local\\\", os: \\\"Linux\\\", ip: \\\"10.0.63.107\\\", mac: \\\"00:0C:29:12:55:38\\\", seen: \\\"2026-06-08 11:43\\\", tags: [\\\"Staging\\\", \\\"Cloud\\\"], adapters: [\\\"cisco_ise_adapter\\\", \\\"claroty_adapter\\\", \\\"counter_act_adapter\\\", \\\"epo_adapter\\\", \\\"tanium_adapter\\\", \\\"esx_adapter\\\", \\\"aws_adapter\\\"] },\\n  { name: \\\"WIN-RUTHD\\\", host: \\\"WIN-RUTHD.demo.local\\\", os: \\\"Windows\\\", ip: \\\"10.0.48.107\\\", mac: \\\"88:53:2E:12:44:9B\\\", seen: \\\"2026-06-08 13:18\\\", tags: [\\\"Corporate\\\"], adapters: [\\\"active_directory_adapter\\\", \\\"cisco_adapter\\\", \\\"crowd_strike_adapter\\\", \\\"cylance_adapter\\\", \\\"epo_adapter\\\", \\\"tanium_adapter\\\"] },\\n  { name: \\\"external3026786-prd\\\", host: \\\"sepio-external3026786-prd.demo.local\\\", os: \\\"Linux\\\", ip: \\\"10.0.64.36\\\", mac: \\\"88:53:2E:12:56:12\\\", seen: \\\"2026-06-08 05:54\\\", tags: [\\\"Production\\\", \\\"Internet-facing\\\"], adapters: [\\\"checkpoint_r80_adapter\\\", \\\"chef_adapter\\\", \\\"epo_adapter\\\", \\\"paloalto_panorama_adapter\\\", \\\"axonius_network_inspector_adapter\\\", \\\"claroty_adapter\\\", \\\"tenable_security_center_adapter\\\"] },\\n  { name: \\\"macbook-pro-jdoe\\\", host: \\\"macbook-pro-jdoe.demo.local\\\", os: \\\"OS X\\\", ip: \\\"10.0.51.22\\\", mac: \\\"A4:83:E7:9C:11:04\\\", seen: \\\"2026-06-08 12:02\\\", tags: [\\\"Endpoint\\\", \\\"BYOD\\\"], adapters: [\\\"google_mdm_adapter\\\", \\\"crowd_strike_adapter\\\", \\\"sentinelone_adapter\\\"] },\\n  { name: \\\"lablb-2918146-beta\\\", host: \\\"esx-lablb-2918146-beta.manufacturing.com\\\", os: \\\"Linux\\\", ip: \\\"10.0.56.90\\\", mac: \\\"00:0C:29:12:4C:BF\\\", seen: \\\"2026-06-08 11:30\\\", tags: [\\\"Lab\\\"], adapters: [\\\"cisco_meraki_adapter\\\", \\\"claroty_adapter\\\", \\\"epo_adapter\\\", \\\"esx_adapter\\\", \\\"tanium_asset_adapter\\\", \\\"counter_act_adapter\\\", \\\"service_now_adapter\\\"] },\\n  { name: \\\"iphone-asmith\\\", host: \\\"\\u2014\\\", os: \\\"iOS\\\", ip: \\\"10.0.77.51\\\", mac: \\\"F0:18:98:22:7D:AA\\\", seen: \\\"2026-06-08 11:58\\\", tags: [\\\"Mobile\\\", \\\"BYOD\\\"], adapters: [\\\"google_mdm_adapter\\\", \\\"zoom_adapter\\\"] },\\n  { name: \\\"srv-db-fin-04\\\", host: \\\"srv-db-fin-04.healthcare-subsidiary.com\\\", os: \\\"Linux\\\", ip: \\\"10.0.40.12\\\", mac: \\\"00:50:56:9A:3C:11\\\", seen: \\\"2026-06-08 07:12\\\", tags: [\\\"Production\\\", \\\"Database\\\", \\\"PCI\\\"], adapters: [\\\"service_now_adapter\\\", \\\"tenable_security_center_adapter\\\", \\\"tanium_adapter\\\", \\\"epo_adapter\\\", \\\"aws_adapter\\\", \\\"claroty_adapter\\\"] },\\n  { name: \\\"azure-infra9274676-prd\\\", host: \\\"azure-infra9274676-prd.demo.local\\\", os: \\\"Windows\\\", ip: \\\"10.0.61.5\\\", mac: \\\"00:0D:3A:1F:8E:22\\\", seen: \\\"2026-06-08 10:47\\\", tags: [\\\"Production\\\", \\\"Cloud\\\"], adapters: [\\\"active_directory_adapter\\\", \\\"aws_adapter\\\", \\\"sentinelone_adapter\\\", \\\"service_now_adapter\\\"] },\\n  { name: \\\"android-pixel-7\\\", host: \\\"\\u2014\\\", os: \\\"Android\\\", ip: \\\"10.0.78.130\\\", mac: \\\"3C:28:6D:55:01:9F\\\", seen: \\\"2026-06-08 09:05\\\", tags: [\\\"Mobile\\\"], adapters: [\\\"google_mdm_adapter\\\"] },\\n  { name: \\\"Win-MaryChasse\\\", host: \\\"WIN-MARYCHASSE.demo.local\\\", os: \\\"Windows\\\", ip: \\\"10.0.49.201\\\", mac: \\\"88:53:2E:12:48:7E\\\", seen: \\\"2026-06-07 22:41\\\", tags: [\\\"Corporate\\\"], adapters: [\\\"active_directory_adapter\\\", \\\"epo_adapter\\\", \\\"cisco_meraki_adapter\\\"] },\\n  { name: \\\"esx-mail-2231-prd\\\", host: \\\"esx-mail-2231-prd.manufacturing.com\\\", os: \\\"VMWare\\\", ip: \\\"10.0.62.18\\\", mac: \\\"00:0C:29:44:1A:E0\\\", seen: \\\"2026-06-08 06:33\\\", tags: [\\\"Production\\\"], adapters: [\\\"esx_adapter\\\", \\\"tenable_security_center_adapter\\\", \\\"paloalto_panorama_adapter\\\"] },\\n  { name: \\\"PC-Doris9920\\\", host: \\\"PC-DORIS9920.demo.local\\\", os: \\\"Windows\\\", ip: \\\"10.0.50.66\\\", mac: \\\"88:53:2E:12:51:C9\\\", seen: \\\"2026-06-08 08:59\\\", tags: [\\\"Corporate\\\", \\\"Managed\\\"], adapters: [\\\"active_directory_adapter\\\", \\\"crowd_strike_adapter\\\", \\\"tanium_adapter\\\", \\\"google_mdm_adapter\\\"] },\\n  { name: \\\"kiosk-lobby-03\\\", host: \\\"kiosk-lobby-03.demo.local\\\", os: \\\"Linux\\\", ip: \\\"10.0.44.7\\\", mac: \\\"B8:27:EB:0C:5A:31\\\", seen: \\\"2026-06-07 19:20\\\", tags: [\\\"IoT\\\", \\\"Unmanaged\\\"], adapters: [\\\"counter_act_adapter\\\", \\\"claroty_adapter\\\"] },\\n];\\n\\nconst INIT_COLS = [\\n  { key: \\\"adapters\\\", label: \\\"Adapter Connections\\\", w: 230, pinned: false },\\n  { key: \\\"name\\\", label: \\\"Asset Name\\\", w: 230, pinned: false },\\n  { key: \\\"host\\\", label: \\\"Host Name\\\", w: 300, pinned: false },\\n  { key: \\\"os\\\", label: \\\"OS Type\\\", w: 140, pinned: false },\\n  { key: \\\"ip\\\", label: \\\"IP Address\\\", w: 140, pinned: false },\\n  { key: \\\"mac\\\", label: \\\"MAC Address\\\", w: 160, pinned: false },\\n  { key: \\\"seen\\\", label: \\\"Last Seen (UTC)\\\", w: 170, pinned: false },\\n  { key: \\\"tags\\\", label: \\\"Tags\\\", w: 220, pinned: false },\\n];\\nconst CB_W = 46;\\nconst mono = { fontFamily: \\\"ui-monospace, 'SF Mono', monospace\\\" };\\nfunction cellContent(key, r) {\\n  switch (key) {\\n    case \\\"adapters\\\": return ;\\n    case \\\"name\\\": return {r.name}&lt;\\/span&gt;;\\n    case \\\"host\\\": return {r.host}&lt;\\/span&gt;;\\n    case \\\"os\\\": return ;\\n    case \\\"ip\\\": return {r.ip}&lt;\\/span&gt;;\\n    case \\\"mac\\\": return {r.mac}&lt;\\/span&gt;;\\n    case \\\"seen\\\": return {r.seen}&lt;\\/span&gt;;\\n    case \\\"tags\\\": return {r.tags.slice(0, 2).map((t, j) =&gt; )}{r.tags.length &gt; 2 &amp;&amp; +{r.tags.length - 2}&lt;\\/span&gt;}&lt;\\/span&gt;;\\n    default: return null;\\n  }\\n}\\n\\nfunction HeaderCell({ col, left, isLastPinned, onResize, onPin, onDragStart, regRef, dragging }) {\\n  const [h, setH] = useState(false);\\n  const sticky = col.pinned;\\n  return (\\n    \n regRef(col.key, el)} onPointerDown={(e) =&gt; onDragStart(e, col.key)} onMouseEnter={() =&gt; setH(true)} onMouseLeave={() =&gt; setH(false)}\\n      style={{ width: col.w, flexShrink: 0, position: sticky ? \\\"sticky\\\" : \\\"relative\\\", left: sticky ? left : undefined, zIndex: sticky ? 4 : 1, background: T.canvas, height: 40, display: \\\"flex\\\", alignItems: \\\"center\\\", gap: 6, padding: \\\"0 12px\\\", boxShadow: isLastPinned ? \\\"2px 0 5px rgba(27,32,70,0.06)\\\" : \\\"none\\\", cursor: \\\"grab\\\", opacity: dragging ? 0.4 : 1 }}&gt;\\n      {col.label}&lt;\\/span&gt;\\n      {(h || col.pinned) &amp;&amp; (\\n         onPin(col.key)} title={col.pinned ? \\\"Unpin column\\\" : \\\"Pin column\\\"}\\n          style={{ width: 24, height: 24, borderRadius: 6, border: \\\"none\\\", cursor: \\\"pointer\\\", background: \\\"transparent\\\", color: col.pinned ? T.blue : T.faint, display: \\\"flex\\\", alignItems: \\\"center\\\", justifyContent: \\\"center\\\", transform: col.pinned ? \\\"none\\\" : \\\"rotate(45deg)\\\", flexShrink: 0 }}&gt;\\n          \\n        &lt;\\/button&gt;\\n      )}\\n      \n onResize(e, col.key)} data-colresize title=\\\"Drag to resize\\\"\\n        style={{ position: \\\"absolute\\\", right: -3, top: 8, width: 6, height: 24, cursor: \\\"col-resize\\\", display: \\\"flex\\\", justifyContent: \\\"center\\\", zIndex: 5 }}&gt;\\n        \\n      &lt;\\/div&gt;\\n    &lt;\\/div&gt;\\n  );\\n}\\n\\nfunction AssetsTable() {\\n  const [columns, setColumns] = useState(INIT_COLS);\\n  const [hoverRow, setHoverRow] = useState(null);\\n  const [perPage, setPerPage] = useState(20);\\n  const [dragCol, setDragCol] = useState(null);\\n  const colEls = useRef({});\\n  const regRef = (k, el) =&gt; { colEls.current[k] = el; };\\n\\n  const startColDrag = (e, key) =&gt; {\\n    if (e.button || (e.target.closest &amp;&amp; (e.target.closest(\\\"[data-colresize]\\\") || e.target.closest(\\\"button\\\")))) return;\\n    const startX = e.clientX; let dragging = false;\\n    const onMove = (ev) =&gt; {\\n      if (!dragging) { if (Math.abs(ev.clientX - startX) &gt; 6) { dragging = true; setDragCol(key); document.body.style.userSelect = \\\"none\\\"; } else return; }\\n      for (const k in colEls.current) {\\n        const el = colEls.current[k]; if (!el || k === key) continue;\\n        const r = el.getBoundingClientRect();\\n        if (ev.clientX &gt;= r.left &amp;&amp; ev.clientX &lt;= r.right) {\\n          setColumns(cs =&gt; { const from = cs.findIndex(c =&gt; c.key === key), to = cs.findIndex(c =&gt; c.key === k); if (from &lt; 0 || to &lt; 0 || from === to) return cs; const n = cs.slice(); const [m] = n.splice(from, 1); n.splice(to, 0, m); return n; });\\n          break;\\n        }\\n      }\\n    };\\n    const onUp = () =&gt; { dragging = false; setDragCol(null); document.body.style.userSelect = \\\"\\\"; window.removeEventListener(\\\"pointermove\\\", onMove); window.removeEventListener(\\\"pointerup\\\", onUp); };\\n    window.addEventListener(\\\"pointermove\\\", onMove); window.addEventListener(\\\"pointerup\\\", onUp);\\n  };\\n\\n  const startColResize = (e, key) =&gt; {\\n    e.preventDefault(); e.stopPropagation();\\n    const sx = e.clientX, startW = columns.find(c =&gt; c.key === key).w;\\n    const onMove = (ev) =&gt; { const w = Math.max(90, startW + (ev.clientX - sx)); setColumns(cs =&gt; cs.map(c =&gt; c.key === key ? { ...c, w } : c)); };\\n    const onUp = () =&gt; { document.body.style.cursor = \\\"\\\"; window.removeEventListener(\\\"mousemove\\\", onMove); window.removeEventListener(\\\"mouseup\\\", onUp); };\\n    document.body.style.cursor = \\\"col-resize\\\";\\n    window.addEventListener(\\\"mousemove\\\", onMove); window.addEventListener(\\\"mouseup\\\", onUp);\\n  };\\n  const togglePin = (key) =&gt; setColumns(cs =&gt; cs.map(c =&gt; c.key === key ? { ...c, pinned: !c.pinned } : c));\\n\\n  const pinned = columns.filter(c =&gt; c.pinned), unpinned = columns.filter(c =&gt; !c.pinned);\\n  const ordered = [...pinned, ...unpinned];\\n  const leftMap = {}; let acc = CB_W;\\n  pinned.forEach(c =&gt; { leftMap[c.key] = acc; acc += c.w; });\\n  const lastPinned = pinned.length ? pinned[pinned.length - 1].key : null;\\n  const totalW = CB_W + columns.reduce((a, c) =&gt; a + c.w, 0);\\n\\n  return (\\n    \n\\n      \n\\n        \n\\n          {/* header */}\\n          \n\\n            \n\\n              \\n            &lt;\\/div&gt;\\n            {ordered.map(c =&gt; )}\\n            \n\\n          &lt;\\/div&gt;\\n          {/* rows */}\\n          {DEVICES.map((r, i) =&gt; {\\n            const rowBg = hoverRow === i ? T.surface2 : T.surface;\\n            return (\\n              \n setHoverRow(i)} onMouseLeave={() =&gt; setHoverRow(null)}\\n                style={{ display: \\\"flex\\\", height: 52, borderBottom: i &lt; DEVICES.length - 1 ? `1px solid ${T.hair}` : \\\"none\\\", background: rowBg }}&gt;\\n                \n\\n                  {hoverRow === i ?  : {i + 1}&lt;\\/span&gt;}\\n                &lt;\\/div&gt;\\n                {ordered.map(c =&gt; {\\n                  const sticky = c.pinned;\\n                  return (\\n                    \n\\n                      {cellContent(c.key, r)}\\n                    &lt;\\/div&gt;\\n                  );\\n                })}\\n                \n\\n              &lt;\\/div&gt;\\n            );\\n          })}\\n        &lt;\\/div&gt;\\n      &lt;\\/div&gt;\\n      {/* footer */}\\n      \n\\n        \n\\n          Rows per page:&lt;\\/span&gt;\\n           setPerPage(Number(e.target.value))}\\n            style={{ height: 30, padding: \\\"0 28px 0 10px\\\", borderRadius: 999, border: `1px solid ${T.line}`, background: T.surface, color: T.ink, fontSize: 13, fontWeight: 500, fontFamily: T.font, cursor: \\\"pointer\\\", appearance: \\\"none\\\", WebkitAppearance: \\\"none\\\", backgroundImage: `url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%238494B5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E\\\")`, backgroundRepeat: \\\"no-repeat\\\", backgroundPosition: \\\"right 8px center\\\", outline: \\\"none\\\" }}&gt;\\n            {[20, 50, 100].map(n =&gt; {n}&lt;\\/option&gt;)}\\n          &lt;\\/select&gt;\\n        &lt;\\/div&gt;\\n        \n\\n          1\\u2013{perPage} of 12,409&lt;\\/span&gt;\\n          \n\\n            &lt;\\/PageBtn&gt;&lt;\\/PageBtn&gt;\\n            1&lt;\\/PageBtn&gt;2&lt;\\/PageBtn&gt;3&lt;\\/PageBtn&gt;4&lt;\\/PageBtn&gt;\\n            \\u2026&lt;\\/span&gt;621&lt;\\/PageBtn&gt;\\n            &lt;\\/PageBtn&gt;&lt;\\/PageBtn&gt;\\n          &lt;\\/div&gt;\\n        &lt;\\/div&gt;\\n      &lt;\\/div&gt;\\n    &lt;\\/div&gt;\\n  );\\n}\\n\\nfunction QueryPill({ children, primary, active, onClick }) {\\n  const [h, setH] = useState(false);\\n  return  setH(true)} onMouseLeave={() =&gt; setH(false)} style={{ display: \\\"inline-flex\\\", alignItems: \\\"center\\\", gap: 6, height: 32, padding: \\\"0 14px\\\", borderRadius: 999, cursor: \\\"pointer\\\", fontFamily: T.font, fontSize: 13.5, fontWeight: 600, border: primary ? \\\"none\\\" : `1px solid ${active || h ? T.lineStrong : T.line}`, background: primary ? T.blue : active || h ? T.surface2 : T.control, color: primary ? T.onAccent : T.body }}&gt;{children}&lt;\\/button&gt;;\\n}\\nfunction ToolLink({ icon: Icon, children }) {\\n  const [h, setH] = useState(false);\\n  return  setH(true)} onMouseLeave={() =&gt; setH(false)} style={{ display: \\\"inline-flex\\\", alignItems: \\\"center\\\", gap: 6, height: 30, padding: \\\"0 10px\\\", border: \\\"none\\\", borderRadius: 999, background: h ? T.surface2 : \\\"transparent\\\", color: T.body, fontSize: 13.5, fontWeight: 600, cursor: \\\"pointer\\\", fontFamily: T.font }}&gt;{Icon &amp;&amp; }{children}&lt;\\/button&gt;;\\n}\\nfunction SegTool({ icon: Icon, title, first }) {\\n  const [h, setH] = useState(false);\\n  return (\\n     setH(true)} onMouseLeave={() =&gt; setH(false)}&gt;\\n      &lt;\\/button&gt;\\n      {h &amp;&amp; {title}&lt;\\/span&gt;}\\n    &lt;\\/span&gt;\\n  );\\n}\\nfunction IconTool({ icon: Icon, title }) {\\n  const [h, setH] = useState(false);\\n  return (\\n     setH(true)} onMouseLeave={() =&gt; setH(false)}&gt;\\n      &lt;\\/button&gt;\\n      {h &amp;&amp; {title}&lt;\\/span&gt;}\\n    &lt;\\/span&gt;\\n  );\\n}\\nfunction Segmented({ options, value, onChange }) {\\n  const idx = Math.max(0, options.indexOf(value));\\n  const wpct = 100 / options.length;\\n  return (\\n    \n\\n      \\n      {options.map(o =&gt; (\\n         onChange(o)} style={{ position: \\\"relative\\\", zIndex: 1, minWidth: 62, padding: \\\"0 12px\\\", border: \\\"none\\\", background: \\\"transparent\\\", color: value === o ? T.onAccent : T.body, fontSize: 13.5, fontWeight: value === o ? 600 : 500, cursor: \\\"pointer\\\", fontFamily: T.font, transition: \\\"color .2s\\\" }}&gt;{o}&lt;\\/button&gt;\\n      ))}\\n    &lt;\\/div&gt;\\n  );\\n}\\n\\nfunction QueriesPanel({ close }) {\\n  const recent = [\\n    { nm: \\\"FH: 1.4 Asset Context.Business Importance\\\", sub: \\\"Shared Queries\\\" },\\n    { nm: \\\"low Risk Score_2025-12-24T11-53\\\", sub: \\\"Public Queries / Predefined Queries\\\" },\\n    { nm: \\\"Unmanaged endpoints seen &lt; 7d\\\", sub: \\\"Shared Queries\\\" },\\n    { nm: \\\"Critical CVEs on internet-facing\\\", sub: \\\"Public Queries / Predefined Queries\\\" },\\n  ];\\n  return createPortal(&lt;&gt;\\n    \n\\n    \n\\n      \n\\n        Queries&lt;\\/span&gt;\\n        &lt;\\/IconBtn&gt;\\n        &lt;\\/IconBtn&gt;\\n        &lt;\\/IconBtn&gt;\\n      &lt;\\/div&gt;\\n      \n\\n        \n\\n          \\n        &lt;\\/div&gt;\\n      &lt;\\/div&gt;\\n      \n\\n        \nFavorites&lt;\\/span&gt;&lt;\\/div&gt;\\n        \nRecently Used Saved Queries&lt;\\/span&gt;&lt;\\/div&gt;\\n        {recent.map((q, i) =&gt; (\\n           (e.currentTarget.style.background = T.surface2)} onMouseLeave={(e) =&gt; (e.currentTarget.style.background = \\\"transparent\\\")}\\n            style={{ display: \\\"flex\\\", alignItems: \\\"center\\\", gap: 11, width: \\\"100%\\\", border: \\\"none\\\", background: \\\"transparent\\\", borderRadius: 10, cursor: \\\"pointer\\\", padding: \\\"9px\\\", textAlign: \\\"left\\\", fontFamily: T.font }}&gt;\\n            &lt;\\/span&gt;\\n            \\n              {q.nm}&lt;\\/span&gt;\\n              {q.sub}&lt;\\/span&gt;\\n            &lt;\\/span&gt;\\n          &lt;\\/button&gt;\\n        ))}\\n      &lt;\\/div&gt;\\n    &lt;\\/div&gt;\\n  &lt;\\/&gt;, document.body);\\n}\\nfunction AssetsView() {\\n  const [mode, setMode] = useState(\\\"Wizard\\\");\\n  const [enrichOpen, setEnrichOpen] = useState(false);\\n  const [queriesOpen, setQueriesOpen] = useState(false);\\n  return (\\n    \n\\n      \n\\n      {/* breadcrumb + title + module actions */}\\n      \n\\n        \n\\n          \nInventory /&lt;\\/span&gt; Assets&lt;\\/div&gt;\\n          \nDevices&lt;\\/h1&gt;\\n        &lt;\\/div&gt;\\n        \n\\n          \n\\n             setEnrichOpen(o =&gt; !o)}&gt;Enrichment &amp; Investigation &lt;\\/QueryPill&gt;\\n            {enrichOpen &amp;&amp; (&lt;&gt;\\n              \n setEnrichOpen(false)} style={{ position: \\\"fixed\\\", inset: 0, zIndex: 40 }} /&gt;\\n              \n\\n                {[\\\"Business Data Enrichment\\\", \\\"Device Inventory Classification\\\", \\\"Asset Investigation\\\"].map(o =&gt; (\\n                   setEnrichOpen(false)} onMouseEnter={(e) =&gt; (e.currentTarget.style.background = T.surface2)} onMouseLeave={(e) =&gt; (e.currentTarget.style.background = \\\"transparent\\\")}\\n                    style={{ display: \\\"flex\\\", alignItems: \\\"center\\\", justifyContent: \\\"space-between\\\", gap: 10, width: \\\"100%\\\", border: \\\"none\\\", background: \\\"transparent\\\", borderRadius: 8, cursor: \\\"pointer\\\", padding: \\\"9px 11px\\\", fontSize: 13, fontWeight: 500, fontFamily: T.font, color: T.body, textAlign: \\\"left\\\" }}&gt;\\n                    {o} \\n                  &lt;\\/button&gt;\\n                ))}\\n              &lt;\\/div&gt;\\n            &lt;\\/&gt;)}\\n          &lt;\\/div&gt;\\n          &lt;\\/IconBtn&gt;\\n        &lt;\\/div&gt;\\n      &lt;\\/div&gt;\\n      {/* query toolbar */}\\n      \n\\n        New Query&lt;\\/ToolLink&gt;\\n        Save As&lt;\\/ToolLink&gt;\\n        Reset&lt;\\/ToolLink&gt;\\n        Copy Query&lt;\\/ToolLink&gt;\\n        \n\\n        Display by Date&lt;\\/ToolLink&gt;\\n        \n\\n         setQueriesOpen(o =&gt; !o)}&gt;{queriesOpen ?  : &lt;&gt; Queries&lt;\\/&gt;}&lt;\\/QueryPill&gt;\\n        \\n      &lt;\\/div&gt;\\n      {/* search + wizard / basic filters */}\\n      {mode === \\\"Wizard\\\" ? (\\n        \n\\n          \n\\n            \\n            \\n          &lt;\\/div&gt;\\n          Query Wizard&lt;\\/button&gt;\\n        &lt;\\/div&gt;\\n      ) : (\\n        \n\\n          \\n          \\n          \nLast Seen&lt;\\/span&gt;&lt;\\/div&gt;\\n          \nTags&lt;\\/span&gt;&lt;\\/div&gt;\\n           Filter&lt;\\/button&gt;\\n        &lt;\\/div&gt;\\n      )}\\n      {/* stats toolbar */}\\n      \n\\n        Total 12,409&lt;\\/span&gt;&lt;\\/span&gt;\\n         Last updated: 2026-06-08 17:07:59&lt;\\/span&gt;&lt;\\/span&gt;\\n        \n\\n        \n\\n          \n\\n            \\n            \\n            \\n          &lt;\\/div&gt;\\n           New Asset&lt;\\/button&gt;\\n        &lt;\\/div&gt;\\n      &lt;\\/div&gt;\\n      &lt;\\/div&gt;{/* end flexShrink header */}\\n      \n\\n        \\n      &lt;\\/div&gt;\\n      {queriesOpen &amp;&amp;  setQueriesOpen(false)} /&gt;}\\n    &lt;\\/div&gt;\\n  );\\n}\\nfunction PageBtn({ children, active, disabled, wide }) {\\n  const [h, setH] = useState(false);\\n  return  setH(true)} onMouseLeave={() =&gt; setH(false)} style={{ minWidth: wide ? \\\"auto\\\" : 30, height: 30, padding: wide ? \\\"0 10px\\\" : 0, borderRadius: 999, border: active ? \\\"none\\\" : `1px solid ${h &amp;&amp; !disabled ? T.lineStrong : \\\"transparent\\\"}`, background: active ? T.blue : h &amp;&amp; !disabled ? T.surface2 : \\\"transparent\\\", color: active ? T.onAccent : disabled ? T.faint : T.body, fontSize: 13, fontWeight: 500, cursor: disabled ? \\\"default\\\" : \\\"pointer\\\", display: \\\"inline-flex\\\", alignItems: \\\"center\\\", justifyContent: \\\"center\\\", fontFamily: T.font, ...tnum }}&gt;{children}&lt;\\/button&gt;;\\n}\\n\\n/* ============ Inventory tree panel (assets view) ============ */\\nconst INV_GROUPS_INIT = [\\n  { name: \\\"Compute\\\", icon: Server, open: true, items: [\\n    { icon: Server, label: \\\"Corporate Devices\\\", count: \\\"8,204\\\", fav: true },\\n    { icon: ShieldAlert, label: \\\"Internet-facing Assets\\\", count: \\\"312\\\", fav: true },\\n    { folder: \\\"Endpoint\\\", open: true, items: [\\n      { icon: Server, label: \\\"Devices\\\", count: \\\"12,409\\\", active: true },\\n      { icon: Workflow, label: \\\"Processes\\\", count: \\\"0\\\" },\\n    ]},\\n    { folder: \\\"Infrastructure\\\", open: false, items: [\\n      { icon: Boxes, label: \\\"Compute Services\\\", count: \\\"14\\\" },\\n      { icon: Cable, label: \\\"Databases\\\", count: \\\"36\\\" },\\n      { icon: Boxes, label: \\\"Containers\\\", count: \\\"258\\\" },\\n      { icon: Cable, label: \\\"Serverless Functions\\\", count: \\\"103\\\" },\\n      { icon: Boxes, label: \\\"Compute Images\\\", count: \\\"25\\\" },\\n    ]},\\n    { icon: Settings, label: \\\"Configurations\\\", count: \\\"0\\\" },\\n    { icon: Clock, label: \\\"Latest Devices\\\", count: \\\"12,409\\\" },\\n  ] },\\n  { name: \\\"Identity\\\", icon: Users, open: false, items: [\\n    { folder: \\\"Directory\\\", open: false, items: [\\n      { icon: Users, label: \\\"Users\\\", count: \\\"4,821\\\" },\\n      { icon: Users, label: \\\"Groups\\\", count: \\\"312\\\" },\\n    ]},\\n    { icon: ShieldAlert, label: \\\"Service Accounts\\\", count: \\\"87\\\" },\\n  ] },\\n  { name: \\\"Applications\\\", icon: Layers, open: false, items: [\\n    { icon: Layers, label: \\\"SaaS Apps\\\", count: \\\"143\\\" },\\n    { icon: Layers, label: \\\"Installed Software\\\", count: \\\"2,904\\\" },\\n  ] },\\n  { name: \\\"Tickets\\\", icon: Bell, open: false, items: [\\n    { icon: Bell, label: \\\"Open Tickets\\\", count: \\\"48\\\" },\\n    { icon: Bell, label: \\\"Resolved\\\", count: \\\"203\\\" },\\n  ] },\\n];\\nfunction InventoryPanel({ collapsed, setCollapsed }) {\\n  const [groups, setGroups] = useState(INV_GROUPS_INIT);\\n  const [favOpen, setFavOpen] = useState(true);\\n\\n  const collectItems = (items) =&gt; items.flatMap(it =&gt; it.folder ? collectItems(it.items) : [it]);\\n  const favItems = groups.flatMap(g =&gt; collectItems(g.items)).filter(it =&gt; it.fav);\\n\\n  const toggleFavInItems = (items, label) =&gt; items.map(it =&gt;\\n    it.folder ? { ...it, items: toggleFavInItems(it.items, label) }\\n              : it.label === label ? { ...it, fav: !it.fav } : it\\n  );\\n  const toggleFav = (label) =&gt; setGroups(gs =&gt; gs.map(g =&gt; ({ ...g, items: toggleFavInItems(g.items, label) })));\\n  const compute = groups.find(g =&gt; g.name === \\\"Compute\\\");\\n  const computeLeafItems = compute ? compute.items.filter(it =&gt; !it.folder) : [];\\n  return (\\n    \n\\n       setCollapsed(!collapsed)} title={collapsed ? \\\"Expand inventory\\\" : \\\"Collapse panel\\\"} className=\\\"ax-edge-collapse\\\"\\n        style={{ position: \\\"absolute\\\", top: 16, right: -14, zIndex: 6, width: 28, height: 28, borderRadius: \\\"50%\\\", border: `1px solid ${T.line}`, background: T.surface, color: T.muted, cursor: \\\"pointer\\\", display: \\\"flex\\\", alignItems: \\\"center\\\", justifyContent: \\\"center\\\", boxShadow: T.shadow }}&gt;\\n        {collapsed ?  : }\\n      &lt;\\/button&gt;\\n      \n\\n        {collapsed ? (\\n          \n\\n            \n\\n              \\n            &lt;\\/div&gt;\\n            \n\\n            {computeLeafItems.map((it, i) =&gt; {\\n              const Icon = it.icon;\\n              return (\\n                \n\\n                  \\n                &lt;\\/div&gt;\\n              );\\n            })}\\n          &lt;\\/div&gt;\\n        ) : (\\n          &lt;&gt;\\n            \n\\n              \n\\n                \\n              &lt;\\/div&gt;\\n            &lt;\\/div&gt;\\n            \n\\n              \n\\n                \n setFavOpen(o =&gt; !o)} style={{ display: \\\"flex\\\", alignItems: \\\"center\\\", gap: 9, padding: \\\"9px 8px\\\", cursor: \\\"pointer\\\", borderRadius: 8, color: T.body }}&gt;\\n                  \\n                  \\n                  Favorites&lt;\\/span&gt;\\n                  {favItems.length}&lt;\\/span&gt;\\n                &lt;\\/div&gt;\\n                {favOpen &amp;&amp; favItems.map((it, ii) =&gt; )}\\n              &lt;\\/div&gt;\\n              {groups.map((g, gi) =&gt; { const Icon = g.icon; return (\\n                \n\\n                  \n setGroups(gs =&gt; gs.map((x, i) =&gt; i === gi ? { ...x, open: !x.open } : x))}\\n                    style={{ display: \\\"flex\\\", alignItems: \\\"center\\\", gap: 9, padding: \\\"9px 8px\\\", cursor: \\\"pointer\\\", borderRadius: 8, color: g.open ? T.accentText : T.body }}&gt;\\n                    \\n                    \\n                    {g.name}&lt;\\/span&gt;\\n                  &lt;\\/div&gt;\\n                  {g.open &amp;&amp; g.items.map((it, ii) =&gt; it.folder ?  : )}\\n                &lt;\\/div&gt;\\n              ); })}\\n            &lt;\\/div&gt;\\n          &lt;\\/&gt;\\n        )}\\n      &lt;\\/div&gt;\\n    &lt;\\/div&gt;\\n  );\\n}\\nfunction InvFolder({ folder, toggleFav }) {\\n  const [open, setOpen] = useState(folder.open);\\n  const [h, setH] = useState(false);\\n  const FIcon = open ? FolderOpen : Folder;\\n  return (\\n    \n\\n      \n setH(true)} onMouseLeave={() =&gt; setH(false)} onClick={() =&gt; setOpen(o =&gt; !o)}\\n        style={{ display: \\\"flex\\\", alignItems: \\\"center\\\", gap: 8, height: 34, padding: \\\"0 8px 0 22px\\\", borderRadius: 8, cursor: \\\"pointer\\\", background: h ? T.surface2 : \\\"transparent\\\", transition: \\\"background .12s\\\" }}&gt;\\n        \\n        \\n        {folder.folder}&lt;\\/span&gt;\\n      &lt;\\/div&gt;\\n      {open &amp;&amp; folder.items.map((it, i) =&gt; )}\\n    &lt;\\/div&gt;\\n  );\\n}\\nfunction InvRow({ icon: Icon, label, count, active, fav, indent, toggleFav }) {\\n  const [h, setH] = useState(false);\\n  const left = indent || 28;\\n  return (\\n    \n setH(true)} onMouseLeave={() =&gt; setH(false)}\\n      style={{ position: \\\"relative\\\", display: \\\"flex\\\", alignItems: \\\"center\\\", gap: 11, height: 36, margin: \\\"1px 0\\\", padding: `0 8px 0 ${left}px`, borderRadius: 8, cursor: \\\"pointer\\\", background: active ? T.accentSoft : h ? T.surface2 : \\\"transparent\\\", transition: \\\"background .14s\\\" }}&gt;\\n      \\n      {label}&lt;\\/span&gt;\\n      {(h || fav) &amp;&amp; toggleFav &amp;&amp; (\\n         { e.stopPropagation(); toggleFav(label); }} title={fav ? \\\"Remove from favorites\\\" : \\\"Add to favorites\\\"} className=\\\"ax-star\\\"\\n          style={{ width: 22, height: 22, borderRadius: 6, border: \\\"none\\\", background: \\\"transparent\\\", cursor: \\\"pointer\\\", display: \\\"flex\\\", alignItems: \\\"center\\\", justifyContent: \\\"center\\\", padding: 0, flexShrink: 0 }}&gt;\\n          \\n        &lt;\\/button&gt;\\n      )}\\n      {!h &amp;&amp; !fav &amp;&amp; {count}&lt;\\/span&gt;}\\n    &lt;\\/div&gt;\\n  );\\n}\\n\\n/* ============ chrome ============ */\\nfunction AppHeader({ theme, setTheme }) {\\n  return (\\n    \n\\n      \n\\n        \\n      &lt;\\/div&gt;\\n      \n\\n        \n\\n          Search Axonius&lt;\\/span&gt;\\n          \\u2318K&lt;\\/span&gt;\\n        &lt;\\/div&gt;\\n      &lt;\\/div&gt;\\n      \n\\n        New navigation BETA&lt;\\/span&gt;&lt;\\/button&gt;\\n         setTheme(theme === \\\"dark\\\" ? \\\"light\\\" : \\\"dark\\\")} title=\\\"Toggle light / dark\\\"&gt;{theme === \\\"dark\\\" ?  : }&lt;\\/HBtn&gt;\\n        &lt;\\/HBtn&gt;\\n        \nSB&lt;\\/div&gt;\\n      &lt;\\/div&gt;\\n    &lt;\\/div&gt;\\n  );\\n}\\nfunction HBtn({ children, onClick, title }) {\\n  const [h, setH] = useState(false);\\n  return  setH(true)} onMouseLeave={() =&gt; setH(false)} style={{ width: 32, height: 32, borderRadius: 8, border: \\\"none\\\", cursor: \\\"pointer\\\", background: h ? T.surface2 : \\\"transparent\\\", color: h ? T.ink : T.bg80, display: \\\"flex\\\", alignItems: \\\"center\\\", justifyContent: \\\"center\\\" }}&gt;{children}&lt;\\/button&gt;;\\n}\\n\\nconst HICONS = {\\n  dashboard: '',\\n  inventory: '',\\n  shield: '',\\n  bolt: '',\\n  link: '',\\n  chart: '',\\n  cog: '',\\n};\\nfunction HIcon({ name, size = 20, color = \\\"currentColor\\\", sw = 1.6, className }) {\\n  return ${HICONS[name] || \\\"\\\"}&lt;\\/svg&gt;` }} /&gt;;\\n}\\nconst RAIL = [\\n  { key: \\\"dashboard\\\", hi: \\\"dashboard\\\", label: \\\"Dashboard\\\" }, { key: \\\"assets\\\", hi: \\\"inventory\\\", label: \\\"Inventory\\\" },\\n  { key: \\\"exposures\\\", hi: \\\"shield\\\", label: \\\"Exposures\\\" }, { key: \\\"action\\\", hi: \\\"bolt\\\", label: \\\"Action Center\\\" },\\n  { key: \\\"adapters\\\", hi: \\\"link\\\", label: \\\"Adapters\\\" }, { key: \\\"analysis\\\", hi: \\\"chart\\\", label: \\\"Analysis\\\" },\\n];\\nfunction IconRail({ view, setView }) {\\n  return (\\n    \n\\n      {RAIL.map(r =&gt;  setView(r.key)} /&gt;)}\\n      \n\\n      \n\\n    &lt;\\/div&gt;\\n  );\\n}\\nfunction RailGlyph({ hi, label, active, onClick }) {\\n  const [h, setH] = useState(false);\\n  return (\\n    \n setH(true)} onMouseLeave={() =&gt; setH(false)} title={label} className=\\\"ax-rail ax-press\\\"\\n      style={{ position: \\\"relative\\\", width: 44, height: 44, borderRadius: 14, cursor: \\\"pointer\\\", display: \\\"flex\\\", alignItems: \\\"center\\\", justifyContent: \\\"center\\\", background: active ? T.accentSoft : h ? T.surface2 : \\\"transparent\\\", transition: \\\"background .15s\\\" }}&gt;\\n      \\n    &lt;\\/div&gt;\\n  );\\n}\\n\\nconst DASH_TREE_INIT = [\\n  { g: \\\"Favorites\\\", open: true, items: [\\n    { nm: \\\"My Dashboard\\\", fav: true }, { nm: \\\"Asset Profile - Copy_2024-06-09\\\", fav: true },\\n    { nm: \\\"Axonius Dashboard\\\", fav: true, active: true, def: true }, { nm: \\\"Cost Optimization\\\", fav: true }, { nm: \\\"Cloud Compliance\\\", fav: true },\\n  ] },\\n  { g: \\\"Public\\\", open: false, items: [\\n    { folder: \\\"Security\\\", open: false, items: [{ nm: \\\"SecOps Overview\\\" }, { nm: \\\"Threat Intelligence\\\" }] },\\n    { folder: \\\"Executive\\\", open: false, items: [{ nm: \\\"Executive Summary\\\" }, { nm: \\\"Board Report\\\" }] },\\n    { nm: \\\"Asset Inventory V 1.0\\\" }, { nm: \\\"Active Directory Insights\\\" },\\n  ] },\\n  { g: \\\"Shared\\\", open: false, items: [\\n    { folder: \\\"Team SOC\\\", open: false, items: [{ nm: \\\"Vulnerability Posture\\\" }, { nm: \\\"Incident Response\\\" }] },\\n    { nm: \\\"Cloud Inventory\\\" }, { nm: \\\"Compliance Overview\\\" },\\n  ] },\\n  { g: \\\"Private\\\", open: false, items: [{ nm: \\\"My Drafts\\\" }, { nm: \\\"Work in Progress\\\" }] },\\n  { g: \\\"Managed by Axonius\\\", open: false, items: [{ nm: \\\"Device Overview\\\" }, { nm: \\\"User Overview\\\" }, { nm: \\\"Adapters Health\\\" }, { nm: \\\"Coverage &amp; Gaps\\\" }] },\\n];\\nfunction PanelBtn({ primary, filled, icon: Icon, children, onClick }) {\\n  const [h, setH] = useState(false);\\n  return (\\n     setH(true)} onMouseLeave={() =&gt; setH(false)} className={filled ? \\\"ax-primary\\\" : \\\"ax-press\\\"}\\n      style={{ height: 38, borderRadius: 999, border: filled ? \\\"none\\\" : primary ? `1.5px solid ${T.accentText}` : `1px solid ${h ? T.lineStrong : T.line}`, cursor: \\\"pointer\\\", width: \\\"100%\\\", background: filled ? (h ? T.blueDeep : T.blue) : primary ? (h ? T.accentSoft : \\\"transparent\\\") : h ? T.surface2 : \\\"transparent\\\", color: filled ? T.onAccent : primary ? T.accentText : T.body, fontSize: 13, fontWeight: 600, fontFamily: T.font, display: \\\"flex\\\", alignItems: \\\"center\\\", justifyContent: \\\"center\\\", gap: 7, boxShadow: \\\"none\\\", transition: \\\"background .14s ease, border-color .14s ease\\\" }}&gt;\\n       {children}\\n    &lt;\\/button&gt;\\n  );\\n}\\nfunction CreateDashModal({ onCreate, close }) {\\n  const [name, setName] = useState(\\\"\\\");\\n  const [tpl, setTpl] = useState(\\\"blank\\\");\\n  const tpls = [{ k: \\\"blank\\\", t: \\\"Blank dashboard\\\", d: \\\"Start from an empty canvas\\\" }, { k: \\\"template\\\", t: \\\"From a template\\\", d: \\\"Prebuilt charts to tweak\\\" }];\\n  return createPortal(\\n    \n\\n      \n e.stopPropagation()} style={{ width: 480, maxWidth: \\\"92vw\\\", background: T.canvas, border: `1px solid ${T.line}`, borderRadius: 14, boxShadow: \\\"0 30px 80px rgba(0,0,0,.55)\\\", overflow: \\\"hidden\\\", animation: \\\"axRise .26s cubic-bezier(.22,1,.36,1) both\\\" }}&gt;\\n        \n\\n          Create dashboard&lt;\\/span&gt;\\n          &lt;\\/IconBtn&gt;\\n        &lt;\\/div&gt;\\n        \n\\n          \n\\n            Dashboard name&lt;\\/label&gt;\\n             setName(e.target.value)} placeholder=\\\"e.g. Security Posture\\\" style={{ width: \\\"100%\\\", height: 40, padding: \\\"0 14px\\\", border: `1px solid ${T.line}`, borderRadius: 8, background: T.control, color: T.ink, fontFamily: T.font, fontSize: 14, outline: \\\"none\\\", boxSizing: \\\"border-box\\\" }} /&gt;\\n          &lt;\\/div&gt;\\n          \n\\n            Starting point&lt;\\/label&gt;\\n            \n\\n              {tpls.map(o =&gt; (\\n                 setTpl(o.k)} style={{ flex: 1, textAlign: \\\"left\\\", padding: \\\"12px 13px\\\", borderRadius: 10, border: `1.5px solid ${tpl === o.k ? T.accentText : T.line}`, background: tpl === o.k ? T.accentSoft : \\\"transparent\\\", cursor: \\\"pointer\\\", fontFamily: T.font }}&gt;\\n                  \n{o.t}&lt;\\/div&gt;\\n                  \n{o.d}&lt;\\/div&gt;\\n                &lt;\\/button&gt;\\n              ))}\\n            &lt;\\/div&gt;\\n          &lt;\\/div&gt;\\n        &lt;\\/div&gt;\\n        \n\\n          Cancel&lt;\\/button&gt;\\n           name.trim() &amp;&amp; onCreate(name.trim())} className=\\\"ax-press\\\" style={{ height: 38, padding: \\\"0 18px\\\", borderRadius: 999, border: \\\"none\\\", background: name.trim() ? T.blue : T.surface2, color: name.trim() ? T.onAccent : T.faint, fontSize: 13.5, fontWeight: 600, cursor: name.trim() ? \\\"pointer\\\" : \\\"default\\\", fontFamily: T.font }}&gt;Create dashboard&lt;\\/button&gt;\\n        &lt;\\/div&gt;\\n      &lt;\\/div&gt;\\n    &lt;\\/div&gt;, document.body);\\n}\\nfunction SidePanel({ collapsed, setCollapsed, activeDash, setActiveDash }) {\\n  const [tree, setTree] = useState(DASH_TREE_INIT);\\n  const [menu, setMenu] = useState(null);\\n  const [editing, setEditing] = useState(null);\\n  const [createOpen, setCreateOpen] = useState(false);\\n\\n  const mut = (fn) =&gt; setTree(t =&gt; fn(t.map(g =&gt; ({ ...g, items: g.items.map(it =&gt; ({ ...it })) }))));\\n  const toggleGroup = (gi) =&gt; setTree(t =&gt; t.map((g, i) =&gt; i === gi ? { ...g, open: !g.open } : g));\\n  const setActive = (gi, ii) =&gt; { mut(t =&gt; { t.forEach(g =&gt; g.items.forEach(it =&gt; it.active = false)); t[gi].items[ii].active = true; return t; }); if (setActiveDash) setActiveDash(tree[gi].items[ii].nm); };\\n  const toggleFav = (gi, ii) =&gt; mut(t =&gt; { t[gi].items[ii].fav = !t[gi].items[ii].fav; return t; });\\n  const setDefault = (gi, ii) =&gt; mut(t =&gt; { t.forEach(g =&gt; g.items.forEach(it =&gt; it.def = false)); t[gi].items[ii].def = true; return t; });\\n  const duplicate = (gi, ii) =&gt; mut(t =&gt; { t[gi].items.splice(ii + 1, 0, { nm: t[gi].items[ii].nm + \\\" (copy)\\\" }); return t; });\\n  const rename = (gi, ii, nm) =&gt; mut(t =&gt; { t[gi].items[ii].nm = nm || t[gi].items[ii].nm; return t; });\\n  const remove = (gi, ii) =&gt; mut(t =&gt; { t[gi].items.splice(ii, 1); return t; });\\n  const createDash = (nm) =&gt; mut(t =&gt; { const p = t.find(g =&gt; g.g === \\\"Private\\\"); p.open = true; p.items.push({ nm: nm || \\\"Untitled dashboard\\\" }); return t; });\\n  const openMenu = (gi, ii, e) =&gt; { const r = e.currentTarget.getBoundingClientRect(); setMenu({ gi, ii, top: r.bottom + 6, left: Math.max(8, r.right - 196) }); };\\n\\n  if (collapsed) {\\n    const favItems = tree.flatMap(g =&gt; g.items).filter(it =&gt; it.fav || it.active);\\n    return (\\n      \n\\n         setCollapsed(false)} title=\\\"Expand dashboards\\\" className=\\\"ax-edge-collapse\\\"\\n          style={{ position: \\\"absolute\\\", top: 16, right: -14, zIndex: 6, width: 28, height: 28, borderRadius: \\\"50%\\\", border: `1px solid ${T.line}`, background: T.surface, color: T.muted, cursor: \\\"pointer\\\", display: \\\"flex\\\", alignItems: \\\"center\\\", justifyContent: \\\"center\\\", boxShadow: T.shadow }}&gt;\\n          \\n        &lt;\\/button&gt;\\n         setCreateOpen(true)} style={{ width: 38, height: 38, borderRadius: 8, border: `1.5px solid ${T.accentText}`, background: \\\"transparent\\\", cursor: \\\"pointer\\\", display: \\\"flex\\\", alignItems: \\\"center\\\", justifyContent: \\\"center\\\", color: T.accentText }}&gt;\\n          \\n        &lt;\\/button&gt;\\n        \n\\n        {favItems.map((s, i) =&gt; (\\n          \n\\n            \\n            {s.fav &amp;&amp; }\\n          &lt;\\/div&gt;\\n        ))}\\n        {createOpen &amp;&amp;  { createDash(nm); setCreateOpen(false); }} close={() =&gt; setCreateOpen(false)} /&gt;}\\n      &lt;\\/div&gt;\\n    );\\n  }\\n  return (\\n    \n\\n       setCollapsed(true)} title=\\\"Collapse panel\\\" className=\\\"ax-edge-collapse\\\"\\n        style={{ position: \\\"absolute\\\", top: 16, right: -14, zIndex: 6, width: 28, height: 28, borderRadius: \\\"50%\\\", border: `1px solid ${T.line}`, background: T.surface, color: T.muted, cursor: \\\"pointer\\\", display: \\\"flex\\\", alignItems: \\\"center\\\", justifyContent: \\\"center\\\", boxShadow: T.shadow }}&gt;\\n        \\n      &lt;\\/button&gt;\\n      \n\\n         setCreateOpen(true)}&gt;Create Dashboard&lt;\\/PanelBtn&gt;\\n        Manage Dashboards&lt;\\/PanelBtn&gt;\\n      &lt;\\/div&gt;\\n      \n\\n        \n\\n          \\n        &lt;\\/div&gt;\\n      &lt;\\/div&gt;\\n      \n\\n        {tree.map((g, gi) =&gt; (\\n          \\n        ))}\\n      &lt;\\/div&gt;\\n      {menu &amp;&amp;  setMenu(null)}\\n        actions={{ rename: () =&gt; setEditing({ gi: menu.gi, ii: menu.ii }), duplicate, toggleFav, setDefault, remove }} /&gt;}\\n      {createOpen &amp;&amp;  { createDash(nm); setCreateOpen(false); }} close={() =&gt; setCreateOpen(false)} /&gt;}\\n    &lt;\\/div&gt;\\n  );\\n}\\nconst DASH_CAT_ICON = { Favorites: Star, Public: Globe, Shared: Users, Private: Lock, \\\"Managed by Axonius\\\": ShieldCheck };\\nfunction DashGroup({ group, gi, toggleGroup, setActive, toggleFav, openMenu, editing, setEditing, rename }) {\\n  const Icon = DASH_CAT_ICON[group.g] || LayoutGrid;\\n  return (\\n    \n\\n       toggleGroup(gi)} className=\\\"ax-catrow\\\"\\n        style={{ display: \\\"flex\\\", alignItems: \\\"center\\\", gap: 9, width: \\\"100%\\\", border: \\\"none\\\", background: \\\"transparent\\\", cursor: \\\"pointer\\\", padding: \\\"8px 8px\\\", borderRadius: 8, fontFamily: T.font }}&gt;\\n        \\n        \\n        {group.g}&lt;\\/span&gt;\\n        {group.g === \\\"Favorites\\\" ? group.items.filter(it =&gt; it.fav !== false).length : group.items.length}&lt;\\/span&gt;\\n      &lt;\\/button&gt;\\n      {group.open &amp;&amp; group.items\\n        .filter(it =&gt; group.g !== \\\"Favorites\\\" || it.fav !== false)\\n        .map((it, ii) =&gt;\\n          it.folder\\n            ? \\n            : \\n        )}\\n    &lt;\\/div&gt;\\n  );\\n}\\nfunction DashFolder({ folder, indent, onToggle }) {\\n  const [h, setH] = useState(false);\\n  const [open, setOpen] = useState(folder.open);\\n  const toggle = () =&gt; { setOpen(o =&gt; !o); if (onToggle) onToggle(!open); };\\n  const FIcon = open ? FolderOpen : Folder;\\n  return (\\n    \n\\n      \n setH(true)} onMouseLeave={() =&gt; setH(false)} onClick={toggle}\\n        style={{ display: \\\"flex\\\", alignItems: \\\"center\\\", gap: 8, height: 34, padding: `0 8px 0 ${indent || 22}px`, borderRadius: 8, cursor: \\\"pointer\\\", background: h ? T.surface2 : \\\"transparent\\\", transition: \\\"background .12s\\\" }}&gt;\\n        \\n        \\n        {folder.folder}&lt;\\/span&gt;\\n      &lt;\\/div&gt;\\n      {open &amp;&amp; folder.items.map((it, i) =&gt; (\\n        \n e.currentTarget.style.background = T.surface2} onMouseLeave={(e) =&gt; e.currentTarget.style.background = \\\"transparent\\\"}&gt;\\n          \\n          {it.nm}&lt;\\/span&gt;\\n        &lt;\\/div&gt;\\n      ))}\\n    &lt;\\/div&gt;\\n  );\\n}\\nfunction DashItem({ item, gi, ii, setActive, toggleFav, openMenu, editing, setEditing, rename }) {\\n  const [h, setH] = useState(false);\\n  return (\\n    \n setH(true)} onMouseLeave={() =&gt; setH(false)} onClick={() =&gt; !editing &amp;&amp; setActive(gi, ii)} className=\\\"ax-press\\\"\\n      style={{ position: \\\"relative\\\", display: \\\"flex\\\", alignItems: \\\"center\\\", gap: 9, height: 36, padding: \\\"0 8px 0 28px\\\", margin: \\\"1px 0\\\", cursor: \\\"pointer\\\", borderRadius: 8, border: \\\"none\\\", background: item.active ? T.accentSoft : h ? T.surface2 : \\\"transparent\\\", transition: \\\"background .14s\\\" }}&gt;\\n      \\n      {editing ? (\\n         e.stopPropagation()}\\n          onBlur={(e) =&gt; { rename(gi, ii, e.target.value.trim()); setEditing(null); }}\\n          onKeyDown={(e) =&gt; { if (e.key === \\\"Enter\\\") { rename(gi, ii, e.target.value.trim()); setEditing(null); } if (e.key === \\\"Escape\\\") setEditing(null); }}\\n          style={{ flex: 1, minWidth: 0, border: `1px solid ${T.blue}`, borderRadius: 6, padding: \\\"2px 6px\\\", fontSize: 13.5, fontFamily: T.font, color: T.ink, outline: \\\"none\\\", background: T.surface }} /&gt;\\n      ) : (\\n        {item.nm}&lt;\\/span&gt;\\n      )}\\n      {(h || item.fav) &amp;&amp; !editing &amp;&amp; (\\n         { e.stopPropagation(); toggleFav(gi, ii); }} title={item.fav ? \\\"Remove from favorites\\\" : \\\"Add to favorites\\\"} className=\\\"ax-star\\\"\\n          style={{ width: 22, height: 22, borderRadius: 6, border: \\\"none\\\", background: \\\"transparent\\\", cursor: \\\"pointer\\\", display: \\\"flex\\\", alignItems: \\\"center\\\", justifyContent: \\\"center\\\", padding: 0, flexShrink: 0 }}&gt;\\n          \\n        &lt;\\/button&gt;\\n      )}\\n      {h &amp;&amp; !editing &amp;&amp; (\\n         { e.stopPropagation(); openMenu(gi, ii, e); }} title=\\\"More actions\\\"\\n          style={{ width: 22, height: 22, borderRadius: 6, border: \\\"none\\\", background: \\\"transparent\\\", cursor: \\\"pointer\\\", display: \\\"flex\\\", alignItems: \\\"center\\\", justifyContent: \\\"center\\\", padding: 0, flexShrink: 0, color: T.muted }}&gt;\\n          \\n        &lt;\\/button&gt;\\n      )}\\n    &lt;\\/div&gt;\\n  );\\n}\\nfunction RowMenu({ menu, tree, close, actions }) {\\n  const it = tree[menu.gi]?.items?.[menu.ii] || {};\\n  const rows = [\\n    { ic: Pencil, l: \\\"Rename\\\", fn: () =&gt; actions.rename() },\\n    { ic: Copy, l: \\\"Duplicate\\\", fn: () =&gt; actions.duplicate(menu.gi, menu.ii) },\\n    { ic: Star, l: it.fav ? \\\"Remove from favorites\\\" : \\\"Add to favorites\\\", fn: () =&gt; actions.toggleFav(menu.gi, menu.ii) },\\n    { ic: Check, l: it.def ? \\\"Default dashboard\\\" : \\\"Set as default\\\", fn: () =&gt; actions.setDefault(menu.gi, menu.ii) },\\n    { ic: Download, l: \\\"Export\\\", fn: () =&gt; {} },\\n    { sep: true },\\n    { ic: Trash2, l: \\\"Delete\\\", danger: true, fn: () =&gt; actions.remove(menu.gi, menu.ii) },\\n  ];\\n  return (\\n    &lt;&gt;\\n      \n\\n      \n\\n        {rows.map((a, i) =&gt; a.sep\\n          ? \n\\n          :  { a.fn(); close(); }}&gt;{a.l}&lt;\\/MenuRow&gt;)}\\n      &lt;\\/div&gt;\\n    &lt;\\/&gt;\\n  );\\n}\\nfunction MenuRow({ icon: Icon, danger, children, onClick }) {\\n  const [h, setH] = useState(false);\\n  return (\\n     setH(true)} onMouseLeave={() =&gt; setH(false)}\\n      style={{ display: \\\"flex\\\", alignItems: \\\"center\\\", gap: 9, width: \\\"100%\\\", border: \\\"none\\\", borderRadius: 8, cursor: \\\"pointer\\\", padding: \\\"7px 9px\\\", fontSize: 13, fontFamily: T.font, fontWeight: 500, textAlign: \\\"left\\\", color: danger ? T.red : T.body, background: h ? (danger ? `${T.red}10` : T.canvas) : \\\"transparent\\\" }}&gt;\\n       {children}\\n    &lt;\\/button&gt;\\n  );\\n}\\n\\nfunction ModuleHeader({ view, activeDash }) {\\n  const isDash = view === \\\"dashboard\\\";\\n  return (\\n    \n\\n      \n{isDash ? \\\"Dashboards / Favorites\\\" : \\\"Assets / All Devices\\\"}&lt;\\/span&gt;&lt;\\/div&gt;\\n      \n\\n        \n\\n          \n{isDash ? activeDash : \\\"Assets\\\"}&lt;\\/h1&gt;\\n          {isDash &amp;&amp; }\\n        &lt;\\/div&gt;\\n        \n\\n          {isDash ? &lt;&gt;\\n             Updated 2m ago&lt;\\/span&gt;\\n            Add Chart&lt;\\/HdrBtn&gt;\\n          &lt;\\/&gt; : &lt;&gt;\\n            Export&lt;\\/HdrBtn&gt;\\n            New Query&lt;\\/HdrBtn&gt;\\n          &lt;\\/&gt;}\\n          &lt;\\/IconBtn&gt;\\n        &lt;\\/div&gt;\\n      &lt;\\/div&gt;\\n    &lt;\\/div&gt;\\n  );\\n}\\nfunction HdrBtn({ icon: Icon, children, primary, filled }) {\\n  const [h, setH] = useState(false);\\n  return  setH(true)} onMouseLeave={() =&gt; setH(false)} style={{ display: \\\"flex\\\", alignItems: \\\"center\\\", gap: 6, height: 34, padding: \\\"0 14px\\\", borderRadius: 999, cursor: \\\"pointer\\\", fontFamily: T.font, fontSize: 13.5, fontWeight: 600, border: filled ? \\\"none\\\" : (primary ? `1.5px solid ${T.accentText}` : `1px solid ${h ? T.lineStrong : T.line}`), background: filled ? (h ? T.blueDeep : T.blue) : (primary ? (h ? T.accentSoft : \\\"transparent\\\") : (h ? T.surface2 : T.control)), color: filled ? T.onAccent : (primary ? T.accentText : T.body) }}&gt;{children}&lt;\\/button&gt;;\\n}\\n\\nfunction AxoniusApp() {\\n  const [view, setView] = useState(\\\"dashboard\\\");\\n  const [collapsed, setCollapsed] = useState(false);\\n  const [invCollapsed, setInvCollapsed] = useState(false);\\n  const [theme, setTheme] = useState(\\\"dark\\\");\\n  const [activeDash, setActiveDash] = useState(\\\"Axonius Dashboard\\\");\\n  T = THEMES[theme];\\n  useEffect(() =&gt; {\\n    document.body.style.background = THEMES[theme].shell;\\n    const el = document.documentElement;\\n    el.classList.add(\\\"theming\\\");\\n    const id = setTimeout(() =&gt; el.classList.remove(\\\"theming\\\"), 450);\\n    return () =&gt; clearTimeout(id);\\n  }, [theme]);\\n  return (\\n    \n\\n      {`@import url('https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500;600;700&amp;family=Schibsted+Grotesk:wght@500;600;700&amp;display=swap'); * { box-sizing: border-box; } .theming, .theming * { transition: background-color .4s ease, border-color .4s ease, color .35s ease, fill .3s ease, stroke .3s ease !important; } *::-webkit-scrollbar { width: 9px; height: 9px; } *::-webkit-scrollbar-thumb { background: ${T.bg40}; border-radius: 5px; } *::-webkit-scrollbar-track { background: transparent; }\\n        .ax-tile *::-webkit-scrollbar-thumb { background: transparent; transition: background .2s ease; }\\n        .ax-tile:hover *::-webkit-scrollbar-thumb { background: ${T.bg40}; }\\n        .ax-tbl::-webkit-scrollbar-thumb { background: transparent; } .ax-tbl:hover::-webkit-scrollbar-thumb { background: ${T.bg40}; } .ax-tbl::-webkit-scrollbar-corner { background: transparent; }\\n        input::placeholder { color: ${T.muted}; opacity: 1; }\\n        .ax-catrow:hover { background: ${T.surface2}; }\\n        .ax-catrow:hover .ax-favbtn { opacity: 1 !important; }\\n        .ax-edge-collapse { opacity: 0; transform: scale(.8); transition: opacity .15s ease, transform .15s ease; }\\n        .ax-sidepanel:hover .ax-edge-collapse { opacity: 1; transform: scale(1); }\\n        button, [role=\\\"button\\\"] { transition: transform .14s cubic-bezier(.34,1.56,.64,1), background-color .15s ease, box-shadow .18s ease, border-color .15s ease, color .12s ease; }\\n        button:not(:disabled):active { transform: scale(.92); }\\n        .ax-press { transition: transform .14s cubic-bezier(.34,1.56,.64,1), background-color .14s ease; }\\n        .ax-press:active { transform: scale(.95); }\\n        .ax-card { transition: transform .2s cubic-bezier(.34,1.56,.64,1), box-shadow .2s ease, border-color .15s ease; }\\n        .ax-card:hover { border-color: ${T.lineStrong} !important; box-shadow: ${T.shadow} !important; }\\n        .ax-primary:hover { transform: translateY(-1px); box-shadow: 0 6px 16px rgba(37,99,235,.4) !important; }\\n        .ax-primary:active { transform: translateY(0) scale(.96); }\\n        @keyframes axRise { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }\\n        .ax-rise { animation: axRise .45s cubic-bezier(.22,1,.36,1) both; }\\n        @keyframes axJiggle { 0%, 100% { transform: rotate(-0.5deg); } 50% { transform: rotate(0.5deg); } }\\n        .ax-jiggle { animation: axJiggle .32s ease-in-out infinite; }\\n        @keyframes axPop { 0% { transform: scale(1); } 45% { transform: scale(1.25) rotate(-8deg); } 100% { transform: scale(1); } }\\n        .ax-star:hover { animation: axPop .4s ease; }\\n        @keyframes axSpin { to { transform: rotate(360deg); } }\\n        .ax-spin:hover { animation: axSpin .6s ease; }\\n        button:not(:disabled):hover { transform: translateY(-1px); }\\n        @keyframes axGrow { from { transform: scaleX(0); } to { transform: scaleX(1); } }\\n        @keyframes axGrowY { from { transform: scaleY(0); } to { transform: scaleY(1); } }\\n        @keyframes axDraw { to { stroke-dashoffset: 0; } }\\n        @keyframes axFade { from { opacity: 0; } to { opacity: 1; } }\\n        @keyframes axSlideIn { from { transform: translateX(100%); } to { transform: translateX(0); } }\\n        @keyframes axBounce { 0% { transform: translateY(0) scale(1); } 35% { transform: translateY(-4px) scale(1.14); } 70% { transform: translateY(0) scale(1); } 100% { transform: translateY(0) scale(1); } }\\n        .ax-rail:hover .ax-railicon { animation: axBounce .5s ease; }\\n        .ax-flat:hover { transform: none !important; }`}&lt;\\/style&gt;\\n      \\n      \n\\n        \\n        \n\\n          {view === \\\"dashboard\\\" &amp;&amp; }\\n          {view === \\\"assets\\\" &amp;&amp; }\\n          \n\\n            {view === \\\"dashboard\\\" &amp;&amp; }\\n            {view === \\\"dashboard\\\" ? (\\n              \n\\n                {DASH_TILESETS[activeDash]\\n                  ? \\n                  : &lt;&gt;&lt;\\/&gt;}\\n              &lt;\\/div&gt;\\n            ) : view === \\\"assets\\\" ? (\\n              \\n            ) : (\\n              \n\\n                {RAIL.find(r =&gt; r.key === view)?.label} view \\u2014 coming soon\\n              &lt;\\/div&gt;\\n            )}\\n          &lt;\\/div&gt;\\n        &lt;\\/div&gt;\\n      &lt;\\/div&gt;\\n    &lt;\\/div&gt;\\n  );\\n}\\n\\ncreateRoot(document.getElementById(\\\"root\\\")).render();\\n    &lt;\\/script&gt;\\n  \\n    fetch('/.inspector/overlay.js')\\n      .then(r =&gt; r.text())\\n      .then(code =&gt; { const s = document.createElement('script'); s.textContent = code; document.head.appendChild(s); })\\n      .catch(() =&gt; {});\\n  &lt;\\/script&gt;\\n  &lt;\\/body&gt;\\n&lt;\\/html&gt;\\n\";\n\n    let editor, updateTimer, blobUrl;\n\n    function updatePreview(src) {\n      document.getElementById('preview-dot').className = 'loading';\n      if (blobUrl) URL.revokeObjectURL(blobUrl);\n      blobUrl = URL.createObjectURL(new Blob([src], { type: 'text\\/html' }));\n      const f = document.getElementById('preview');\n      f.onload = () =&gt; { document.getElementById('preview-dot').className = ''; };\n      f.src = blobUrl;\n    }\n\n    function downloadFile() {\n      const src = editor ? editor.getValue() : INITIAL_SOURCE;\n      const a = document.createElement('a');\n      a.href = URL.createObjectURL(new Blob([src], { type: 'text\\/html' }));\n      a.download = 'design-sandbox3.html'; a.click();\n    }\n\n    function resetSource() {\n      if (editor) editor.setValue(INITIAL_SOURCE);\n      updatePreview(INITIAL_SOURCE);\n    }\n\n    async function copySource() {\n      const src = editor ? editor.getValue() : INITIAL_SOURCE;\n      await navigator.clipboard.writeText(src);\n      const btn = document.getElementById('copy-btn');\n      btn.textContent = '&#10003; Copied!';\n      setTimeout(() =&gt; { btn.innerHTML = '&#11096; Copy HTML'; }, 2000);\n    }\n\n    // Resizable divider\n    const divider = document.getElementById('divider');\n    const edPane = document.getElementById('editor-pane');\n    let drag = false, sx, sw;\n    divider.addEventListener('mousedown', e =&gt; { drag = true; sx = e.clientX; sw = edPane.offsetWidth; divider.classList.add('dragging'); e.preventDefault(); });\n    document.addEventListener('mousemove', e =&gt; { if (!drag) return; edPane.style.width = Math.max(280, Math.min(sw + e.clientX - sx, window.innerWidth - 280)) + 'px'; editor &amp;&amp; editor.layout(); });\n    document.addEventListener('mouseup', () =&gt; { drag = false; divider.classList.remove('dragging'); });\n\n    require.config({ paths: { vs: 'https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.45.0/min/vs' } });\n    require(['vs\\/editor\\/editor.main'], function() {\n      editor = monaco.editor.create(document.getElementById('monaco-container'), {\n        value: INITIAL_SOURCE,\n        language: 'html',\n        theme: 'vs-dark',\n        fontSize: 12.5,\n        lineHeight: 20,\n        minimap: { enabled: true },\n        wordWrap: 'off',\n        scrollBeyondLastLine: false,\n        automaticLayout: true,\n        folding: true,\n        bracketPairColorization: { enabled: true },\n      });\n      updatePreview(INITIAL_SOURCE);\n      editor.onDidChangeModelContent(() =&gt; {\n        const st = document.getElementById('status');\n        st.textContent = 'editing\u2026'; st.className = 'saving';\n        clearTimeout(updateTimer);\n        updateTimer = setTimeout(() =&gt; {\n          const v = editor.getValue();\n          updatePreview(v);\n          st.textContent = (v.length / 1024).toFixed(0) + ' KB';\n          st.className = 'idle';\n        }, 1000);\n      });\n    });\n  \n\n", "creation_timestamp": "2026-06-29T18:55:06.069538Z"}, {"uuid": "3a2f9196-b4d9-4a7f-87e1-e20142dea393", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/ZerodayAlert/96", "content": "Apache ActiveMQ \u043f\u043e\u0434 \u043e\u0441\u0430\u0434\u043e\u0439: \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CVE-2023-46604 \u0438 \u043a\u0440\u0438\u043f\u0442\u043e\u043c\u0430\u0439\u043d\u0435\u0440 Kinsing\n\n\u26a1\ufe0f \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CVE-2023-46604 \u0432 Apache ActiveMQ \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 Linux.\n\n\u26a1\ufe0f \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b Kinsing \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u043c\u0430\u0439\u043d\u0438\u043d\u0433\u0430 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442, \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0445\u043e\u0441\u0442\u0430.\n\n\u26a1\ufe0f \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0433\u0440\u0443\u043f\u043f\u0430\u043c\u0438 \u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u041f\u041e \u0438 \u0442\u0440\u043e\u044f\u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430.\n\n#Linux #ApacheActiveMQ #Kinsing #\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c\n\n@ZerodayAlert", "creation_timestamp": "2026-07-06T11:00:15.024193Z"}, {"uuid": "78d17fbb-8ebc-4a0c-a227-9856a539e61e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/ZerodayAlert/91", "content": "Apache ActiveMQ: \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u041f\u041e\n\n\ud83d\ude08 \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f VulnCheck \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u0442\u0435\u0445\u043d\u0438\u043a\u0443 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 CVE-2023-46604 \u0432 Apache ActiveMQ, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0443\u044e \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434.\n\n\ud83d\ude08 \u0413\u0440\u0443\u043f\u043f\u044b \u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u0435\u0439 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u041f\u041e, \u0432\u043a\u043b\u044e\u0447\u0430\u044f HelloKitty \u0438 \u0432\u0438\u0440\u0443\u0441 TellYouThePass, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0442\u0440\u043e\u044f\u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 SparkRAT.\n\n\ud83d\ude08 VulnCheck \u043d\u0430\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u044b ActiveMQ \u0438, \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043a \u043d\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u0438\u0437 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u044b\u0445 \u0430\u0442\u0430\u043a \u0447\u0435\u0440\u0435\u0437 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c.\n\n#VulnCheck #ApacheActiveMQ #CyberSecurity  #Ransomware\n\n@ZerodayAlert", "creation_timestamp": "2026-07-06T11:00:15.043457Z"}, {"uuid": "b29502aa-ab1c-4aee-83fe-27bae7cd2cca", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/ZerodayAlert/96", "content": "Apache ActiveMQ \u043f\u043e\u0434 \u043e\u0441\u0430\u0434\u043e\u0439: \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CVE-2023-46604 \u0438 \u043a\u0440\u0438\u043f\u0442\u043e\u043c\u0430\u0439\u043d\u0435\u0440 Kinsing\n\n\u26a1\ufe0f \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CVE-2023-46604 \u0432 Apache ActiveMQ \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 Linux.\n\n\u26a1\ufe0f \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b Kinsing \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u043c\u0430\u0439\u043d\u0438\u043d\u0433\u0430 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442, \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0445\u043e\u0441\u0442\u0430.\n\n\u26a1\ufe0f \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0433\u0440\u0443\u043f\u043f\u0430\u043c\u0438 \u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u041f\u041e \u0438 \u0442\u0440\u043e\u044f\u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430.\n\n#Linux #ApacheActiveMQ #Kinsing #\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c\n\n@ZerodayAlert", "creation_timestamp": "2026-07-07T00:00:23.319361Z"}, {"uuid": "402d497b-9724-4f8e-a2d2-b191e921d085", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/ZerodayAlert/91", "content": "Apache ActiveMQ: \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u041f\u041e\n\n\ud83d\ude08 \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f VulnCheck \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u0442\u0435\u0445\u043d\u0438\u043a\u0443 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 CVE-2023-46604 \u0432 Apache ActiveMQ, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0443\u044e \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434.\n\n\ud83d\ude08 \u0413\u0440\u0443\u043f\u043f\u044b \u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u0435\u0439 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u041f\u041e, \u0432\u043a\u043b\u044e\u0447\u0430\u044f HelloKitty \u0438 \u0432\u0438\u0440\u0443\u0441 TellYouThePass, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0442\u0440\u043e\u044f\u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 SparkRAT.\n\n\ud83d\ude08 VulnCheck \u043d\u0430\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u044b ActiveMQ \u0438, \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043a \u043d\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u0438\u0437 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u044b\u0445 \u0430\u0442\u0430\u043a \u0447\u0435\u0440\u0435\u0437 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c.\n\n#VulnCheck #ApacheActiveMQ #CyberSecurity  #Ransomware\n\n@ZerodayAlert", "creation_timestamp": "2026-07-07T00:00:23.346202Z"}, {"uuid": "c320bc38-0ece-45a9-aa1f-803f85725108", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/ZerodayAlert/91", "content": "Apache ActiveMQ: \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u041f\u041e\n\n\ud83d\ude08 \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f VulnCheck \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u0442\u0435\u0445\u043d\u0438\u043a\u0443 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 CVE-2023-46604 \u0432 Apache ActiveMQ, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0443\u044e \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434.\n\n\ud83d\ude08 \u0413\u0440\u0443\u043f\u043f\u044b \u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u0435\u0439 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u041f\u041e, \u0432\u043a\u043b\u044e\u0447\u0430\u044f HelloKitty \u0438 \u0432\u0438\u0440\u0443\u0441 TellYouThePass, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0442\u0440\u043e\u044f\u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 SparkRAT.\n\n\ud83d\ude08 VulnCheck \u043d\u0430\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u044b ActiveMQ \u0438, \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043a \u043d\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u0438\u0437 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u044b\u0445 \u0430\u0442\u0430\u043a \u0447\u0435\u0440\u0435\u0437 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c.\n\n#VulnCheck #ApacheActiveMQ #CyberSecurity  #Ransomware\n\n@ZerodayAlert", "creation_timestamp": "2026-07-12T04:00:04.376400Z"}, {"uuid": "1d1b8db6-9700-4774-b723-e0c5a5638771", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/ZerodayAlert/96", "content": "Apache ActiveMQ \u043f\u043e\u0434 \u043e\u0441\u0430\u0434\u043e\u0439: \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CVE-2023-46604 \u0438 \u043a\u0440\u0438\u043f\u0442\u043e\u043c\u0430\u0439\u043d\u0435\u0440 Kinsing\n\n\u26a1\ufe0f \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CVE-2023-46604 \u0432 Apache ActiveMQ \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 Linux.\n\n\u26a1\ufe0f \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b Kinsing \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u043c\u0430\u0439\u043d\u0438\u043d\u0433\u0430 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442, \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0445\u043e\u0441\u0442\u0430.\n\n\u26a1\ufe0f \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0433\u0440\u0443\u043f\u043f\u0430\u043c\u0438 \u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u041f\u041e \u0438 \u0442\u0440\u043e\u044f\u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430.\n\n#Linux #ApacheActiveMQ #Kinsing #\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c\n\n@ZerodayAlert", "creation_timestamp": "2026-07-12T04:00:04.416625Z"}, {"uuid": "556df23c-9bf4-403d-9b40-0f00e58ce0e6", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/ZerodayAlert/91", "content": "Apache ActiveMQ: \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u041f\u041e\n\n\ud83d\ude08 \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f VulnCheck \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u0442\u0435\u0445\u043d\u0438\u043a\u0443 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 CVE-2023-46604 \u0432 Apache ActiveMQ, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0443\u044e \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434.\n\n\ud83d\ude08 \u0413\u0440\u0443\u043f\u043f\u044b \u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u0435\u0439 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u041f\u041e, \u0432\u043a\u043b\u044e\u0447\u0430\u044f HelloKitty \u0438 \u0432\u0438\u0440\u0443\u0441 TellYouThePass, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0442\u0440\u043e\u044f\u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 SparkRAT.\n\n\ud83d\ude08 VulnCheck \u043d\u0430\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u044b ActiveMQ \u0438, \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043a \u043d\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u0438\u0437 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u044b\u0445 \u0430\u0442\u0430\u043a \u0447\u0435\u0440\u0435\u0437 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c.\n\n#VulnCheck #ApacheActiveMQ #CyberSecurity  #Ransomware\n\n@ZerodayAlert", "creation_timestamp": "2026-07-13T00:00:52.802488Z"}, {"uuid": "2f15653f-18b1-4f3b-894e-df1cf82cdc15", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/ZerodayAlert/96", "content": "Apache ActiveMQ \u043f\u043e\u0434 \u043e\u0441\u0430\u0434\u043e\u0439: \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CVE-2023-46604 \u0438 \u043a\u0440\u0438\u043f\u0442\u043e\u043c\u0430\u0439\u043d\u0435\u0440 Kinsing\n\n\u26a1\ufe0f \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CVE-2023-46604 \u0432 Apache ActiveMQ \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 Linux.\n\n\u26a1\ufe0f \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b Kinsing \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u043c\u0430\u0439\u043d\u0438\u043d\u0433\u0430 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442, \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0445\u043e\u0441\u0442\u0430.\n\n\u26a1\ufe0f \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0433\u0440\u0443\u043f\u043f\u0430\u043c\u0438 \u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u041f\u041e \u0438 \u0442\u0440\u043e\u044f\u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430.\n\n#Linux #ApacheActiveMQ #Kinsing #\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c\n\n@ZerodayAlert", "creation_timestamp": "2026-07-13T00:00:52.829638Z"}, {"uuid": "3beeece8-667d-44c6-8e27-7ce6b871c913", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/cyberwarehouse/141", "content": "https://github.com/projectdiscovery/nuclei-templates/blob/CVE-2023-46604/http/cves/2023/CVE-2023-46604.yaml", "creation_timestamp": "2026-07-17T11:00:07.724521Z"}, {"uuid": "221a8a1e-6c6e-4b48-9716-5ba93ee5a2cb", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/cyberwarehouse/141", "content": "https://github.com/projectdiscovery/nuclei-templates/blob/CVE-2023-46604/http/cves/2023/CVE-2023-46604.yaml", "creation_timestamp": "2026-07-18T00:00:27.963412Z"}, {"uuid": "1a032117-19a3-40db-bbf4-62dca78f317b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/pphm_HackerNews/839", "content": "CVE Exploited and Obfuscated: Attackers Hide in Plain Sight After Breaking In\n\nA high-level attack campaign is underway targeting cloud-based Linux systems by exploiting a critical remote code execution vulnerability in Apache ActiveMQ (CVE-2023-46604). In a rare tactic, threat actors repair the flaw after exploiting it, securing exclusive control and evading detection.\n\n\ud83d\udd17 Read More", "creation_timestamp": "2026-07-22T05:00:05.199770Z"}, {"uuid": "96cb7fd8-d7bd-4b37-b468-7df8f865dedd", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "exploited", "source": "https://t.me/pphm_HackerNews/839", "content": "CVE Exploited and Obfuscated: Attackers Hide in Plain Sight After Breaking In\n\nA high-level attack campaign is underway targeting cloud-based Linux systems by exploiting a critical remote code execution vulnerability in Apache ActiveMQ (CVE-2023-46604). In a rare tactic, threat actors repair the flaw after exploiting it, securing exclusive control and evading detection.\n\n\ud83d\udd17 Read More", "creation_timestamp": "2026-07-23T00:00:24.875336Z"}, {"uuid": "acabaa66-78cc-4361-97e6-5cdb086cbcdd", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/EchelonEyes/2117", "content": "3000 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 Apache ActiveMQ \u0443\u044f\u0437\u0432\u0438\u043c\u044b \u0434\u043b\u044f \u0430\u0442\u0430\u043a \u0441 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430\n\n\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u0443\u044e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u041a\u0438\u0442\u0430\u0435 \u0438 \u0421\u0428\u0410, \u043e\u0434\u043d\u0430\u043a\u043e 100 \u0438\u0437 \u043d\u0438\u0445 \u2013 \u0420\u043e\u0441\u0441\u0438\u0438.\n\nApache ActiveMQ \u2014 \u044d\u0442\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u0441\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 Java \u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0436\u044a\u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f AMQP, MQTT, OpenWire \u0438 STOMP. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u043e\u043d \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0430\u0445, \u0433\u0434\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0431\u0435\u0437 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.\n\n\u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u2014 CVE-2023-46604 (\u043e\u0446\u0435\u043d\u043a\u0430 CVSS: 10,0). \u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430\u043c \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\u0431\u043e\u043b\u043e\u0447\u043a\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 OpenWire.\n\n\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 Apache Active MQ \u0438 Legacy OpenWire Module: \u0432\u0435\u0440\u0441\u0438\u0438 5.18.x \u0434\u043e 5.18.3, \u0432\u0435\u0440\u0441\u0438\u0438 5.17.x \u0434\u043e 5.17.6, \u0432\u0435\u0440\u0441\u0438\u0438 5.16.x \u0434\u043e 5.16.7, \u0432\u0441\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e 5.15.16.\n\n\u0425\u043e\u0442\u044f \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a \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, \u0442\u044b\u0441\u044f\u0447\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u043b\u0443\u0436\u0431\u0435 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0443\u0433\u0440\u043e\u0437 ShadowServer, \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u044b.\n\n\u042d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 CVE-2023-46604 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043a\u0440\u0430\u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0434\u0430\u0436\u0435 \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044e \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430 \u043f\u043e \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u0435\u0442\u0438.\n\n\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: https://www.bleepingcomputer.com/news/security/3-000-apache-activemq-servers-vulnerable-to-rce-attacks-exposed-online/ \n\n#\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c", "creation_timestamp": "2026-07-26T02:02:19.446985Z"}, {"uuid": "5cc75312-acdd-4ffe-8b4a-a0627a381e89", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/EchelonEyes/2117", "content": "3000 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 Apache ActiveMQ \u0443\u044f\u0437\u0432\u0438\u043c\u044b \u0434\u043b\u044f \u0430\u0442\u0430\u043a \u0441 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430\n\n\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u0443\u044e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u041a\u0438\u0442\u0430\u0435 \u0438 \u0421\u0428\u0410, \u043e\u0434\u043d\u0430\u043a\u043e 100 \u0438\u0437 \u043d\u0438\u0445 \u2013 \u0420\u043e\u0441\u0441\u0438\u0438.\n\nApache ActiveMQ \u2014 \u044d\u0442\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u0441\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 Java \u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0436\u044a\u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f AMQP, MQTT, OpenWire \u0438 STOMP. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u043e\u043d \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0430\u0445, \u0433\u0434\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0431\u0435\u0437 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.\n\n\u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u2014 CVE-2023-46604 (\u043e\u0446\u0435\u043d\u043a\u0430 CVSS: 10,0). \u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430\u043c \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\u0431\u043e\u043b\u043e\u0447\u043a\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 OpenWire.\n\n\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 Apache Active MQ \u0438 Legacy OpenWire Module: \u0432\u0435\u0440\u0441\u0438\u0438 5.18.x \u0434\u043e 5.18.3, \u0432\u0435\u0440\u0441\u0438\u0438 5.17.x \u0434\u043e 5.17.6, \u0432\u0435\u0440\u0441\u0438\u0438 5.16.x \u0434\u043e 5.16.7, \u0432\u0441\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e 5.15.16.\n\n\u0425\u043e\u0442\u044f \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a \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, \u0442\u044b\u0441\u044f\u0447\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u043b\u0443\u0436\u0431\u0435 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0443\u0433\u0440\u043e\u0437 ShadowServer, \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u044b.\n\n\u042d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 CVE-2023-46604 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043a\u0440\u0430\u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0434\u0430\u0436\u0435 \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044e \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430 \u043f\u043e \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u0435\u0442\u0438.\n\n\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: https://www.bleepingcomputer.com/news/security/3-000-apache-activemq-servers-vulnerable-to-rce-attacks-exposed-online/ \n\n#\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c", "creation_timestamp": "2026-07-27T00:00:56.090690Z"}, {"uuid": "1da111f9-544f-446d-a701-a1920b26891f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/EchelonEyes/2117", "content": "3000 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 Apache ActiveMQ \u0443\u044f\u0437\u0432\u0438\u043c\u044b \u0434\u043b\u044f \u0430\u0442\u0430\u043a \u0441 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430\n\n\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u0443\u044e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u041a\u0438\u0442\u0430\u0435 \u0438 \u0421\u0428\u0410, \u043e\u0434\u043d\u0430\u043a\u043e 100 \u0438\u0437 \u043d\u0438\u0445 \u2013 \u0420\u043e\u0441\u0441\u0438\u0438.\n\nApache ActiveMQ \u2014 \u044d\u0442\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u0441\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 Java \u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0436\u044a\u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f AMQP, MQTT, OpenWire \u0438 STOMP. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u043e\u043d \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0430\u0445, \u0433\u0434\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0431\u0435\u0437 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.\n\n\u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u2014 CVE-2023-46604 (\u043e\u0446\u0435\u043d\u043a\u0430 CVSS: 10,0). \u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430\u043c \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\u0431\u043e\u043b\u043e\u0447\u043a\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 OpenWire.\n\n\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 Apache Active MQ \u0438 Legacy OpenWire Module: \u0432\u0435\u0440\u0441\u0438\u0438 5.18.x \u0434\u043e 5.18.3, \u0432\u0435\u0440\u0441\u0438\u0438 5.17.x \u0434\u043e 5.17.6, \u0432\u0435\u0440\u0441\u0438\u0438 5.16.x \u0434\u043e 5.16.7, \u0432\u0441\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e 5.15.16.\n\n\u0425\u043e\u0442\u044f \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a \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, \u0442\u044b\u0441\u044f\u0447\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u043b\u0443\u0436\u0431\u0435 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0443\u0433\u0440\u043e\u0437 ShadowServer, \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u044b.\n\n\u042d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 CVE-2023-46604 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043a\u0440\u0430\u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0434\u0430\u0436\u0435 \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044e \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430 \u043f\u043e \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u0435\u0442\u0438.\n\n\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: https://www.bleepingcomputer.com/news/security/3-000-apache-activemq-servers-vulnerable-to-rce-attacks-exposed-online/ \n\n#\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c", "creation_timestamp": "2026-07-28T00:00:30.310492Z"}, {"uuid": "82fd0755-066e-4f02-ad8f-ba6ac965fd81", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://poliverso.org/objects/0477a01e-66d81917-442e1a3db5444e7f", "content": "Exploits and vulnerabilities in Q2 2026\nThe vulnerability landscape shifted significantly in Q2 2026. First, the number of registered CVEs reached an unprecedented level. This is driven primarily by the widespread adoption of AI, both for application development and search for security flaws. This resulted in entire new classes of vulnerabilities emerging, particularly in the Linux networking subsystem.\nSecond, security researchers have been publishing exploits for unpatched vulnerabilities more frequently. Publications like these can generate significant fallout, since they potentially open the door for attackers to target unprotected systems.\nStatistics on registered vulnerabilities\nThis section provides statistical data on registered vulnerabilities. The data comes from Kaspersky\u2019s vulnerability knowledge base, which draws on the CVE database as well as the Russian BDU database and GitHub Advisory (GHSA). As a result, the figures for previous reporting periods may differ from those published in earlier reports.\nWe examine the number of registered vulnerabilities for each month over the last five years. As the chart below shows, this number continues to surge, a trend reflected across all the databases we track. It\u2019s driven primarily by the widespread adoption of AI tools: as we predicted in our previous report, these tools have played a major role in the discovery of vulnerabilities in third-party software. Meanwhile, these tools often contain security issues of their own. For example, OpenClaw, a popular AI project, ranked 12th among those with the highest number of vulnerabilities discovered and published in Q2, with over 200 CVEs registered during the reporting period. Finally, AI development tools are also contributing to the vulnerability landscape, since the quality of the code they produce can vary widely. Therefore, the rate at which new vulnerabilities are discovered will inevitably keep growing.\nTotal published vulnerabilities per month from 2022 through 2026 (download)\nNext, we analyze the number of new critical vulnerabilities (CVSS &gt; 9.0) over the same period.\nTotal critical vulnerabilities published per month from 2022 through 2026 (download)\nAs the chart shows, the number of published critical vulnerabilities jumped sharply in Q2. This is because using AI for vulnerability research makes it possible to analyze massive amounts of previously unexamined code, uncover new attack surfaces, and identify entire classes of vulnerabilities that have gone unnoticed for decades. In particular, AI was used to find a series of Dirty Frag vulnerabilities in the Linux kernel.\nExploitation statistics\nThis section presents statistics on vulnerability exploitation for Q2 2026. The data draws on open sources and our telemetry.\nWindows and Linux vulnerability exploitation\nQ2 2026 saw a new precedent in the publication of vulnerabilities in Windows components and exploits for these: researchers no longer waiting for CVE registration, let alone patches. A case in point: a researcher who goes by Nightmare Eclipse (also known as Chaotic Eclipse) published a list of new \u201cnamed\u201d vulnerabilities across various Windows subsystems. At the time the technical details were published, none of the vulnerabilities had been assigned a CVE identifier:\n\nBlueHammer: a local privilege escalation vulnerability in Windows Defender. During signature database updates, a time-of-check to time-of-use (TOCTOU) race condition occurs, allowing an attacker to substitute the directory where temporary update files are written. The researcher published a fully functional exploit for the vulnerability.\nRedSun: another logical vulnerability in Windows Defender with a working exploit. Suspicious and malicious files marked as \u201ccloud\u201d can be overwritten or restored to their original directory with elevated privileges. The exploit incorporates fragments of algorithms that make it possible to leverage various logical vulnerabilities in Windows, effectively combining a large number of popular exploitation techniques.\nYellowKey: a vulnerability that lets the user bypass BitLocker full-disk encryption and access system data through the Windows Recovery Environment (WinRE). A fully functional exploit was also published.\nGreenPlasma: a vulnerability that enables system object injection via the CTF loader for the Collaborative Translation Framework (CTFMON) service in Windows. The original publication included an exploit with limited functionality.\nRougePlanet: yet another Windows Defender vulnerability that, like BlueHammer, stems from a TOCTOU issue, this time in the engine responsible for real-time system scanning. The published exploit uses the vulnerability to overwrite the system file wermgr.exe with a malicious one.\nUnDefend: another vulnerability in the Windows Defender service. This time, the exploit causes a denial of service and blocks updates.\nEven though such cases remain isolated for now, we believe they\u2019ll grow into a full-fledged trend. Early publication of exploits gives attackers an advantage over software developers, who are left with no time to fix the issues.\nVeteran vulnerabilities in Windows software also remain relevant. These are the ones our solutions most frequently detect exploits for:\n\nCVE-2018-0802: a remote code execution (RCE) vulnerability in the Equation Editor component\nCVE-2017-11882: another RCE vulnerability also affecting Equation Editor\nCVE-2017-0199: a vulnerability in Microsoft Office and WordPad that allows an attacker to gain control over the system\nCVE-2023-38831: a vulnerability in WinRAR that involves improper handling of objects within an archive\nCVE-2025-6218 (formerly ZDI-CAN-27198): another WinRAR vulnerability allowing the specification of relative paths to extract files into arbitrary directories, potentially leading to malicious command execution\nCVE-2025-8088: a vulnerability similar in exploitation method to CVE-2025-6218. The attackers used NTFS Streams to circumvent controls on the directory into which files are being unpacked\nThe vulnerabilities listed here can be leveraged to gain initial access to a vulnerable system and for privilege escalation. This underscores the critical importance of timely software updates.\nThat said, the number of Windows users who encountered exploits declined slightly in Q2, hitting an 18-month low.\nDynamics of the number of Windows users encountering exploits, Q1 2025 \u2013 Q2 2026. The number of users who encountered exploits in Q1 2025 is taken as 100% (download)\nLinux also hit a rough patch in Q2 2026. Specifically, the period saw the disclosure of the Dirty Frag family of vulnerabilities, which lets an attacker reliably escalate privileges within the operating system.\nAll the vulnerabilities published in Q2 2026 were, in one way or another, related to the Linux caching subsystem. Here are the ones being most actively exploited:\n\nCVE-2026-31431 (Copy Fail): a local privilege escalation vulnerability in the Linux kernel that lets an unprivileged user modify the page cache and gain root privileges. Especially dangerous for cloud and containerized environments\nCVE-2026-43284, CVE-2026-43500 (Dirty Frag): a family of vulnerabilities in the Linux networking subsystem (IPsec ESP and RxRPC) that lets a local user overwrite the page cache and escalate privileges to root\nCVE-2026-46300 (Fragnesia): a local privilege escalation vulnerability in the Linux kernel related to packet fragment handling and the page cache mechanism. It lets an unprivileged user gain root privileges and is also classified as part of the Dirty Frag family\nCVE-2026-31635 (DirtyDecrypt): a Linux kernel vulnerability that lets a local attacker escalate privileges due to improper handling of decryption operations and page cache data modification\nCVE-2026-43494 (PinTheft): a Linux kernel vulnerability that lets a local user gain elevated privileges due to errors in the memory page pinning mechanism\nCVE-2026-46331 (pedit COW): a vulnerability in the Linux kernel\u2019s traffic control subsystem (tc-pedit) that exploits a flaw in copy-on-write to modify the page cache and subsequently escalate privileges to root\nThe vulnerabilities described above were quickly embraced by attackers. At the same time, our solutions continue to detect exploitation attempts targeting older vulnerabilities as well:\n\nCVE-2022-0847: a vulnerability known as Dirty Pipe, which enables privilege escalation and the hijacking of running applications\nCVE-2019-13272: a vulnerability caused by improper handling of privilege inheritance, which can be exploited to achieve privilege escalation\nCVE-2021-22555: a heap out-of-bounds write vulnerability in the Netfilter kernel subsystem\nCVE-2023-32233: another Netfilter subsystem vulnerability that allows for Use-After-Free conditions and privilege escalation through improper processing of network requests\nDynamics of the number of Linux users encountering exploits, Q1 2025 \u2013 Q2 2026. The number of users who encountered exploits in Q1 2025 is taken as 100% (download)\nIn Q2 2026, the number of Linux users who encountered exploits declined slightly compared to Q1. Given that a significant share of new vulnerabilities are tied to the operating system\u2019s caching subsystem, we recommend installing patches as quickly as possible, or disabling vulnerable kernel modules if patching isn\u2019t an option.\nMost common published exploits\nThe distribution of published exploits by software type in Q2 2026 includes categories that haven\u2019t appeared in the sample for a long time. For instance, we\u2019re once again seeing exploits targeting SharePoint. It\u2019s worth noting that while several vulnerability write-ups for Exchange and SharePoint were published during the quarter, most turned out to be fake, AI-generated research. While the articles and exploit source code themselves look fairly polished, they describe nonexistent problems in the software or its components \u2014 often close to genuinely vulnerable mechanisms \u2014 in order to mislead researchers. This type of attack is aimed at increasing the time it takes to detect real vulnerabilities. In some cases, the description of a nonexistent vulnerability came bundled with completely unrelated malware.\nDistribution of published exploits by platform, Q1 2026 (download)\nDistribution of published exploits by platform, Q2 2026 (download)\nVulnerability exploitation in APT attacks\nWe analyzed which vulnerabilities were exploited in APT attacks during Q2 2026. The rankings provided below include data based on our telemetry, research, and open sources.\nTOP 10 vulnerabilities exploited in APT attacks, Q2 2026 (download)\nIn Q2 2026, a trend emerged in APT attacks toward exploiting new vulnerabilities right from the moment they\u2019re published. As before, we\u2019re also seeing a large number of zero-day vulnerabilities. The Langflow vulnerability deserves particular attention: it\u2019s one of the first cases of an APT group exploiting AI technology, which many organizations are only just beginning to integrate. Because most of this tech is proprietary, it has a considerable number of security blind spots. Therefore, given the growing number of AI-based automation tools, we strongly recommend going beyond the usual patching and developing secure procedures for credential use and sensitive data handling in systems that rely on agents and LLMs.\nC2 frameworks\nIn this section, we examine the most popular C2 frameworks used by APT groups and analyze the vulnerabilities targeted by the exploits that interacted with C2 agents in APT attacks.\nThe chart below shows the frequency of known C2 framework usage in attacks during Q2 2026, according to open sources.\nTOP 10 C2 frameworks used by APTs to compromise user systems, Q2 2026 (download)\nSliver, Havoc, AdaptixC2, and Metasploit remain the most widely used C2 frameworks. After studying open sources and analyzing samples of malicious C2 agents that contained exploits, we determined that the following vulnerabilities were utilized in APT attacks involving the C2 frameworks mentioned above:\n\nCVE-2026-35273: a vulnerability in Oracle PeopleSoft PeopleTools that security vendors classify as server-side request forgery (SSRF). The details of the vulnerability have never been disclosed, although some research covers the post-exploitation steps\nCVE-2023-46604: an insecure deserialization vulnerability in Apache ActiveMQ that allows arbitrary code execution in the context of the service process\nCVE-2024-12356 and CVE-2026-1731: command injection vulnerabilities in BeyondTrust software that allow an attacker to send malicious commands even without system authentication\nCVE-2023-36884: a vulnerability in the Windows Search component that allows commands to be run on the system, bypassing the mark-of-the-web (MoTW) mechanism\nCVE-2025-53770: an insecure deserialization vulnerability in Microsoft SharePoint that allows for unauthenticated command execution on the server\nCVE-2025-8088 and CVE-2025-6218: similar directory traversal vulnerabilities in WinRAR that allow files to be extracted from an archive to a predetermined path, potentially without the archiving utility displaying any alerts to the user\nThese vulnerabilities show that attackers used them for initial access and privilege escalation on vulnerable systems, setting the stage for launching a C2 agent. They include both zero-day vulnerabilities and fairly well-known security issues.\nLLM/AI tool vulnerabilities\nThis section analyzes data published in Kaspersky\u2019s vulnerability knowledge base. We reviewed the Q2 2026 version of the knowledge base.\nAs mentioned above, AI tools, plugins, and technologies have proven fairly effective at automating the search for problematic code and anomalous behavior. The high speed at which new vulnerabilities are being discovered has naturally created a need to fix them just as quickly. AI is often used for this too, which increases the volume of code being generated. However, neither code written without human involvement nor AI-generated advice is always correct.\nThe chart below covers registered vulnerabilities in AI tools for 2025\u20132026.\nNumber of published vulnerabilities in LLMs, AI tools, and plugins with similar functionality, 2025\u20132026 (download)\nAs the charts show, AI tools are racking up a substantial number of registered vulnerabilities, and that number keeps growing quarter over quarter. It\u2019s also worth looking at how AI tool vulnerabilities break down by type, according to the CWE system:\nTOP 6 vulnerability types in products that implement or use AI/LLM logic, 2025\u20132026\nInterestingly, vulnerabilities of an undetermined type have ranked first in every quarter since the start of 2025. Traditionally-made software has the same issue, and it doesn\u2019t look like the growing number of AI tools will fix it. It\u2019s also notable that the list includes classes CWE developers themselves don\u2019t recommend using for vulnerability classification, since they lump together a whole range of more specific types. CWE-284 is an example of this.\nLooking at the most common classes, the key issues found in AI-related software can be summed up as follows:\n\nInadequate access control over critical system objects\nImproper implementation of authentication and authorization mechanisms\nInjections\nIt\u2019s worth noting that injection-related vulnerabilities were relatively rare before AI agents took off (previously, they mostly affected web apps). Recently, though, these security issues have become relevant again.\nLooking back at a year and a half of the AI boom, one conclusion stands out regarding registered vulnerabilities: AI tool developers are more focused on expanding functionality than on security. This is worth keeping in mind when using these tools. Let\u2019s look at the projects and applications that either integrated AI tools or offered them as the core product. Below is a list of the those with the highest number of registered vulnerabilities for 2025\u20132026.\nTOP AI/LLM-related projects by number of published vulnerabilities, 2025\u20132026 (download)\nNotable vulnerabilities\nThis section highlights the most significant vulnerabilities published in Q2 2026 that have publicly available descriptions. Since the above already covers several significant vulnerabilities published during the reporting period, this section consists mainly of LLM/AI tool vulnerabilities.\nCVE-2026-25253: a gatewayUrl vulnerability in OpenClaw\nThe issue stems from the fact that the OpenClaw user interface trusts the value of the gatewayUrl parameter passed in the URL and automatically establishes a WebSocket connection to the specified address. During this connection process, it sends an authentication token without any additional user confirmation.\nThe attack algorithm exploiting this vulnerability works as follows:\n\nThe application obtains a critical connection address from an external source (the gatewayUrl URL parameter), which is controlled by the attacker.\nThere is no validation before use.\nThe client automatically initiates a connection to the address specified in the parameter, which belongs to the attacker.\nWhile connected, the application sends credentials (an access token) to the specified address.\nIf the attacker obtains a valid token, the consequences depend on that token\u2019s level of access within the system. In general, this could lead to:\n\nUser session compromise\nExecution of operations on the user\u2019s behalf\nModification of the AI agent configuration\nUnauthorized access to tools and resources connected to the agent\nUnder certain OpenClaw configurations, further compromise of the host running the agent\nIt\u2019s worth noting that the risk of exploitation arises from a combination of several factors: the automatic connection and token transmission, the lack of address trust verification, and the high privileges granted to the local AI agent.\nCVE-2026-41948: a path traversal vulnerability in the Dify AI platform\nThe vulnerability lets an authenticated user craft a request that enables the application to escape its permitted tenant and gain access to internal REST APIs that weren\u2019t meant for that user. The root cause is insufficient normalization and validation of the URL path before it\u2019s passed to the internal service.\nDepending on the Dify configuration, the consequences can include:\n\nUnauthorized access to internal service interfaces\nBreach of isolation between workspaces\nExposure of internal service information\nConditions favorable to further attacks when combined with other vulnerabilities\nThe use of Dify in enterprise AI platforms is particularly risky, since internal services there tend to hold elevated privileges.\nCVE-2026-45386: an improper access control vulnerability in Open WebUI\nIn Open WebUI, pin/unpin operations on messages are write operations, since they modify that message\u2019s metadata (is_pinned, pinned_by, pinned_at). In vulnerable versions, however, before performing these actions, the API only checked for read access to the channel (a chat between a user or group and the AI) containing the message, not permission to modify its content. As a result, a user with a role limited to viewing messages could still change a message\u2019s pinned status.\nThe vulnerability\u2019s mechanism works as follows:\n\nThe user initiates an action that changes the state of an object.\nThe application treats this action as a regular read request.\nOnly channel view permission is checked.\nThe application performs a write without verifying the required user authorization.\nThis violates one of the fundamental principles of access control models \u2014 namely, that any operation that changes the state of data must be checked for the appropriate write or moderation permissions, regardless of whether the object itself is readable.\nAlthough the vulnerability doesn\u2019t lead to arbitrary code execution or compromise of sensitive data, it can affect data integrity and collaborative workflows. Potential consequences of exploitation include unauthorized pinning or unpinning of messages, disruption of channel moderators\u2019 and administrators\u2019 activities, changes to the display order of important information, and even the potential spread of false or misleading information by altering the channel containing a pinned message.\nOpen WebUI is widely used as an interface for interacting with local and enterprise LLMs. In these systems, pinned messages often contain important instructions, announcements, or tips for users. The ability to modify them with minimal privileges can disrupt collaborative workflows, cause confusion, and undermine trust in information published by administrators and moderators.\nCVE-2026-45501: a vulnerability in Microsoft Exchange\nThe vulnerability stems from improper neutralization of user input when generating Exchange web pages. As a result, the browser may interpret specially crafted data as active content instead of plain text.\nAlthough Microsoft categorizes the potential impact of exploiting this vulnerability as spoofing, flaws like this can lead to alteration of displayed content, imitation of trusted interfaces, actions on behalf of the user within an active session, and abuse of user trust.\nIt\u2019s worth noting that issues like this are still relevant in modern software, given that mechanisms like Content Security Policy and various parsers were specifically created to help developers neutralize dangerous parts of user page content.\nConclusion and advice\nQ2 brought the first significant results of AI automation adoption in software development and vulnerability hunting tools. This research shows that beyond traditional patch management, organizations now need real-time monitoring of systems and access controls, since infrastructure and everyday applications now contain far more AI functionality that could lead to compromise.\nAccordingly, besides quickly detecting infrastructure vulnerabilities and managing security patches, modern enterprise-grade security solutions need to provide a broad range of preventive measures for tracking the overall health of systems and workstations. Kaspersky Next meets these requirements by combining proactive mechanisms with the ability to respond promptly to emerging threats. \nsecurelist.com/vulnerabilities\u2026", "creation_timestamp": "2026-08-26T10:30:36.466602Z"}, {"uuid": "3490564d-624a-4154-bd79-c101b216fd04", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "Telegram/Y77gHVTBkEwe_B8H7TYEkJj_P2j4BEeA0LI6LQ2vGbWCnCU", "content": "", "creation_timestamp": "2026-08-30T05:00:04.281305Z"}, {"uuid": "86aab043-0477-448b-a131-5f36b1f78338", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/reverseame/4012", "content": "CVE-2023-46604-Attacking &amp; Defending ActiveMQ https://www.prio-n.com/blog/cve-2023-46604-attacking-defending-ActiveMQ", "creation_timestamp": "2026-07-29T12:02:22.733758Z"}, {"uuid": "bef6bd04-b1f9-4222-87f6-ef4b9f58382b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/reverseame/3992", "content": "Executing from Memory Using ActiveMQ CVE-2023-46604 https://vulncheck.com/blog/cve-2023-44604-activemq-in-memory", "creation_timestamp": "2026-07-29T12:02:23.050570Z"}, {"uuid": "028531b9-ca70-434c-88c3-8595793ad61f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/cisoclub/4458", "content": "\u0425\u0430\u043a\u0435\u0440 \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u043b \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0432\u0437\u043b\u043e\u043c\u0430, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0445 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u0432\n\n\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 Red Canary \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u0438 \u043e \u043d\u043e\u0432\u043e\u0439 \u0442\u0430\u043a\u0442\u0438\u043a\u0435, \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u0438 \u0430\u0442\u0430\u043a\u0430\u0445 \u043d\u0430 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435 Linux-\u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0417\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a, \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0447\u0435\u0440\u0435\u0437 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 Apache ActiveMQ (CVE-2023-46604), \u043f\u043e\u0441\u043b\u0435 \u0435\u0451 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0441\u0430\u043c \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u043b \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u2014 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0445\u0430\u043a\u0435\u0440\u043e\u0432 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439.\n\n\u0420\u0435\u0447\u044c \u0438\u0434\u0451\u0442 \u043e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0435 \u0432 Apache ActiveMQ \u2014 \u0431\u0440\u043e\u043a\u0435\u0440\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c. \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u0430\u044f \u0432 2023 \u0433\u043e\u0434\u0443, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0438\u0437-\u0437\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0438\u043f\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 OpenWire-\u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445. \u0425\u043e\u0442\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u0438 \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u044b \u043f\u043e\u0447\u0442\u0438 \u0434\u0432\u0430 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434, CVE-2023-46604 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0430\u0442\u0430\u043a\u0430\u0445, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u0446\u0435\u043b\u044f\u0445 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u041f\u041e: \u043e\u0442 \u043a\u0440\u0438\u043f\u0442\u043e\u043c\u0430\u0439\u043d\u0435\u0440\u043e\u0432 \u0434\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c-\u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u0435\u0439.\n\n\u0412 \u0445\u043e\u0434\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u043e\u0432, \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 Red Canary, \u0430\u0442\u0430\u043a\u0443\u044e\u0449\u0438\u0439 \u043f\u043e\u0441\u043b\u0435 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b \u0434\u0432\u0430 \u043d\u043e\u0432\u044b\u0445 JAR-\u0444\u0430\u0439\u043b\u0430, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u0438\u043c\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b ActiveMQ. \u0422\u0430\u043a\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e \u0441\u0443\u0442\u0438 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u043e\u0433\u043e \u043f\u0430\u0442\u0447\u0430.\n\n\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0441\u0447\u0438\u0442\u0430\u044e\u0442, \u0447\u0442\u043e \u0442\u0430\u043a\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0441\u044f \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043e\u0432 \u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0437\u0430\u0449\u0438\u0442\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u043a\u0430\u043d\u0435\u0440\u043e\u0432 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043d\u0435\u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442.\n\n\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0431\u0438\u0442\u044c \u0441 \u0442\u043e\u043b\u043a\u0443 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432 \u043f\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438: \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u0430 \u0438 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438 \u043d\u0435 \u0431\u044b\u043b\u043e. \u0422\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c, \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f.\n\n\u0412 Red Canary \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u043b\u0438, \u0447\u0442\u043e \u044d\u0442\u0430 \u0442\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u043e\u0439 \u0438 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0440\u0435\u0434\u0430 \u043a\u0438\u0431\u0435\u0440\u0443\u0433\u0440\u043e\u0437. \u0425\u0430\u043a\u0435\u0440\u044b \u0432\u0441\u0451 \u0447\u0430\u0449\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442 \u043d\u0435\u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b, \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u0443\u044f\u0441\u044c \u043a \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0435 \u0431\u043e\u0440\u044c\u0431\u044b \u0437\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0432\u0437\u043b\u043e\u043c\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438. \u0423\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u043b\u0435 \u0435\u0451 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0441\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u043b\u0435\u0434\u043e\u0432, \u043d\u043e \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043e\u043a.\n\n\ud83d\udd17 \u0414\u0440\u0443\u0433\u0438\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043f\u0440\u043e \u0445\u0430\u043a\u0435\u0440\u043e\u0432, \u043c\u043e\u0448\u0435\u043d\u043d\u0438\u043a\u043e\u0432, \u0443\u0442\u0435\u0447\u043a\u0438 \u0438 \u0418\u0411 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u0434\u0435\u0441\u044c.", "creation_timestamp": "2026-07-29T12:03:04.444683Z"}, {"uuid": "c98630b5-f29c-40b4-8e11-9e997643d7fc", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/cisoclub/2999", "content": "\u041e\u0431\u0437\u043e\u0440 #\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0437\u0430 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0443\u044e \u043d\u0435\u0434\u0435\u043b\u044e (22-29 \u043d\u043e\u044f\u0431\u0440\u044f)\n\n1\ufe0f\u20e3 \u0425\u0430\u043a\u0435\u0440\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 ownCloud (CVE-2023-49103), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0443\u0447\u0435\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u043f\u0430\u0440\u043e\u043b\u0438 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u043e\u043d\u043d\u044b\u0435 \ud83d\udd11\u043a\u043b\u044e\u0447\u0438 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445.\n\n2\ufe0f\u20e3 \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Google \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u0438 \u043e \u0432\u044b\u043f\u0443\u0441\u043a\u0435 \u044d\u043a\u0441\u0442\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \ud83c\udf0eChrome, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0434\u043d\u044f \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0434 \u0430\u0442\u0430\u043a\u0430\u043c\u0438.\n\n3\ufe0f\u20e3 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u041f\u041e Kinsing \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044e\u0442 \u2755\u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CVE-2023-46604 \u0432 Apache ActiveMQ \u0434\u043b\u044f \u0430\u0442\u0430\u043a \u043d\u0430 Linux-\u0441\u0438\u0441\u0442\u0435\u043c\u044b. \n\n4\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Akamai \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e\u0442, \u0447\u0442\u043e \u043d\u043e\u0432\u044b\u0439 \ud83d\udcbbMirai-\u0431\u043e\u0442\u043d\u0435\u0442 InfectedSlurs \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u0442 \u0434\u0432\u0435 0-day \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043d\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u0430\u0445 \u0438 NVR (Network Video Recorder).\n\n5\ufe0f\u20e3 \u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u044f Microsoft \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0430, \u0447\u0442\u043e \u0437\u0430 10 \u043b\u0435\u0442 \u0432\u044b\u043f\u043b\u0430\u0442\u0438\u043b\u0430 \ud83d\udcb563 \u043c\u043b\u043d. \u0434\u043e\u043b\u043b\u0430\u0440\u043e\u0432 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u043e\u0437\u043d\u0430\u0433\u0440\u0430\u0436\u0434\u0435\u043d\u0438\u044f \u00ab\u0431\u0435\u043b\u044b\u043c \u0445\u0430\u043a\u0435\u0440\u0430\u043c\u00bb, \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0432 \u0435\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445 \u0432\u043e\u0437\u043d\u0430\u0433\u0440\u0430\u0436\u0434\u0435\u043d\u0438\u044f \u0437\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a.\n\n6\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442\u044b \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0438, \u0447\u0442\u043e \u0434\u043b\u044f \u0430\u0442\u0430\u043a\u0438 \u043d\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e \ud83c\uddef\ud83c\uddf5Toyota Financial Services Europe &amp; Africa \u0445\u0430\u043a\u0435\u0440\u044b \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 CVE-2023-4966 \u0432 Citrix NetScaler.\n\n7\ufe0f\u20e3 \u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u044f Microsoft \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \ud83d\udee0\u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044e \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 Azure (CLI), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044e \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.\n\n8\ufe0f\u20e3 \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c Intel \u0438 AMD \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \ud83d\udd12\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u0438\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0432 \u043e\u0431\u0449\u0435\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c 130 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u0445, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0432 \u0438\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u0445.", "creation_timestamp": "2026-07-29T12:03:06.432589Z"}, {"uuid": "ee1cf116-0d38-4480-9732-d083037ce77b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/cisoclub/2945", "content": "\u041e\u0431\u0437\u043e\u0440 #\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0437\u0430 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0443\u044e \u043d\u0435\u0434\u0435\u043b\u044e (1-6 \u043d\u043e\u044f\u0431\u0440\u044f)\n\n1\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Trend Micro \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u0438, \u0447\u0442\u043e Microsoft Exchange \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d \u0441\u0440\u0430\u0437\u0443 \u0447\u0435\u0442\u044b\u0440\u0435\u043c \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u043c \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0434\u043d\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \ud83e\uddb9\ud83c\udffc\u200d\u2642\ufe0f\u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438\u043b\u0438 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \n\n2\ufe0f\u20e3 \u0412 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Qnap \u0437\u0430\u044f\u0432\u0438\u043b\u0438 \u043e \u0434\u0432\u0443\u0445 \u2755\u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0441 \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u044f\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b QTS \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 NAS \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430.\n\n3\ufe0f\u20e3 \u041a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 Atlassian Confluence, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445, \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0445\u0430\u043a\u0435\u0440\u0430\u043c\u0438 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \ud83d\udcb5\u0432\u044b\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u041f\u041e. \n\n4\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442\u044b \u00ab\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u041a\u0430\u0441\u043f\u0435\u0440\u0441\u043a\u043e\u0433\u043e\u00bb \u043f\u043e\u0434\u0435\u043b\u0438\u043b\u0438\u0441\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \ud83d\udcca\u0430\u043d\u0430\u043b\u0438\u0437\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0430\u0442\u0430\u043a\u0438 \u043a\u0430\u043c\u043f\u0430\u043d\u0438\u0438 \u00ab\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0422\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044f\u00bb. \u0412 \u0430\u0442\u0430\u043a\u0430\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c 5 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439, 4 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u044b\u043b\u0438 \u0440\u0430\u043d\u0435\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c\u0438 0-day \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438.\n\n5\ufe0f\u20e3 \u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e\u0442, \u0447\u0442\u043e \u0441\u0432\u044b\u0448\u0435 3 \u0442\u044b\u0441. \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 Apache ActiveMQ, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \ud83d\udcbb\u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0443\u044f\u0437\u0432\u0438\u043c\u044b \u043f\u0435\u0440\u0435\u0434 \u043d\u043e\u0432\u043e\u0439 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 RCE-\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c\u044e (CVE-2023-46604). \n\n6\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442\u044b Mandiant \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u043b\u0438, \u0447\u0442\u043e \u0445\u0430\u043a\u0435\u0440\u044b \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c Citrix Bleed (CVE-2023-4966) \u0434\u043b\u044f \ud83d\udd11\u043a\u0438\u0431\u0435\u0440\u0430\u0442\u0430\u043a \u043d\u0430 \u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438 \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438.\n\n7\ufe0f\u20e3 \u042d\u043a\u0441\u043f\u0435\u0440\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b \ud83d\udcbeproof-of-concept \u044d\u043a\u0441\u043f\u043b\u043e\u0438\u0442 \u0434\u043b\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 Wyze Cam v3, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0439 reverse shell \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438. \n\n8\ufe0f\u20e3 \u0412 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \ud83d\udcbdPoC-\u044d\u043a\u0441\u043f\u043b\u043e\u0438\u0442 \u0434\u043b\u044f \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 Cisco IOS XE (CVE-2023-20198), \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0443\u0436\u0435 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0445\u0430\u043a\u0435\u0440\u044b \u0434\u043b\u044f \u0432\u0437\u043b\u043e\u043c\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0442\u044b\u0441\u044f\u0447 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432.", "creation_timestamp": "2026-07-29T12:03:07.492535Z"}, {"uuid": "1d1698ce-0902-4353-8905-593a15cfb28f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://gist.github.com/Cristhianepcc/c7e27a9709162b053b2f3fd0fc0a981e", "content": "group: SOC - Gesti\u00f3n de Vulnerabilidades\ndescription: Base de datos de un Security Operations Center para gesti\u00f3n de vulnerabilidades e incidentes\n\nAnalista = {id_analista, nombre, especialidad, nivel, salario\n1, 'Carlos L\u00f3pez', 'Malware Analysis', 'Senior', 85000\n2, 'Mar\u00eda Garc\u00eda', 'Vulnerability Management', 'Specialist', 72000\n3, 'Juan Rodr\u00edguez', 'Incident Response', 'Junior', 48000\n4, 'Sofia Mart\u00ednez', 'Threat Intelligence', 'Senior', 90000\n5, 'Pedro S\u00e1nchez', 'Network Security', 'Specialist', 70000\n}\n\nActivo = {id_activo, hostname, ip, sistema_operativo, criticidad\n101, 'web-server-01', '192.168.1.10', 'Linux Ubuntu 20.04', 'Cr\u00edtico'\n102, 'db-server-01', '192.168.1.20', 'Linux CentOS 8', 'Cr\u00edtico'\n103, 'firewall-01', '192.168.1.1', 'PfSense 2.5', 'Cr\u00edtico'\n104, 'workstation-01', '192.168.1.50', 'Windows 10', 'Medio'\n105, 'dns-server-01', '192.168.1.30', 'Linux Ubuntu 22.04', 'Alto'\n106, 'mail-server-01', '192.168.1.40', 'Linux Debian 11', 'Alto'\n107, 'storage-01', '192.168.1.60', 'Windows Server 2019', 'Medio'\n108, 'ldap-server-01', '192.168.1.35', 'Linux Ubuntu 18.04', 'Alto'\n}\n\nVulnerabilidad = {id_vuln, cve, descripcion, severidad, cvss\n1001, 'CVE-2023-44487', 'HTTP/2 Rapid Reset (DoS)', 'Alto', 7.5\n1002, 'CVE-2023-46604', 'Apache OFBiz Authentication Bypass', 'Cr\u00edtico', 9.8\n1003, 'CVE-2023-21123', 'Intel CPU Denial of Service', 'Medio', 5.5\n1004, 'CVE-2023-4911', 'glibc Buffer Overflow', 'Cr\u00edtico', 9.3\n1005, 'CVE-2023-38545', 'curl SOCKS5 Heap Buffer Overflow', 'Alto', 8.8\n1006, 'CVE-2023-35078', 'WordPress Plugin Vulnerability', 'Medio', 6.5\n1007, 'CVE-2023-20198', 'IOS Local Privilege Escalation', 'Alto', 7.8\n1008, 'CVE-2023-21839', 'Windows LDAP Remote Code Execution', 'Cr\u00edtico', 9.9\n}\n\nHallazgo = {id_hallazgo, id_activo, id_vuln, id_analista, fecha_deteccion, estado\n2001, 101, 1002, 1, 2023-10-15, 'Remediado'\n2002, 102, 1004, 2, 2023-10-16, 'En Progreso'\n2003, 101, 1001, 3, 2023-10-17, 'Detectado'\n2004, 103, 1008, 4, 2023-10-18, 'Remediado'\n2005, 105, 1005, 5, 2023-10-19, 'En Progreso'\n2006, 104, 1006, 2, 2023-10-20, 'Detectado'\n2007, 106, 1003, 1, 2023-10-21, 'Remediado'\n2008, 108, 1007, 3, 2023-10-22, 'En Progreso'\n2009, 102, 1001, 4, 2023-10-23, 'Detectado'\n2010, 107, 1005, 5, 2023-10-24, 'Remediado'\n2011, 101, 1008, 1, 2023-10-25, 'Detectado'\n}\n\nIncidente = {id_incidente, id_activo, id_analista, tipo, fecha_inicio, impacto\n3001, 101, 1, 'Exfiltraci\u00f3n de Datos', 2023-10-15, 'Alto'\n3002, 102, 2, 'Acceso No Autorizado', 2023-10-16, 'Cr\u00edtico'\n3003, 105, 4, 'DoS', 2023-10-17, 'Medio'\n3004, 103, 5, 'Malware', 2023-10-19, 'Alto'\n3005, 108, 3, 'Phishing', 2023-10-22, 'Bajo'\n3006, 106, 1, 'Privileg Escalation', 2023-10-25, 'Cr\u00edtico'\n}", "creation_timestamp": "2026-07-29T20:11:56.586479Z"}, {"uuid": "078d926c-5e10-4282-8023-706fabaa0561", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/reverseame/4012", "content": "CVE-2023-46604-Attacking &amp; Defending ActiveMQ https://www.prio-n.com/blog/cve-2023-46604-attacking-defending-ActiveMQ", "creation_timestamp": "2026-07-30T00:02:25.010989Z"}, {"uuid": "3fa18290-1b24-4554-87cb-38d8a48901f9", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/reverseame/3992", "content": "Executing from Memory Using ActiveMQ CVE-2023-46604 https://vulncheck.com/blog/cve-2023-44604-activemq-in-memory", "creation_timestamp": "2026-07-30T00:02:25.324861Z"}, {"uuid": "e3920a80-1d94-4bdf-bb27-6dbe68987fff", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/cissp/7331", "content": "tools\nCloud Security\n1. A collection of resources, tools and more for pentesting/securing MS Azure\nhttps://github.com/Kyuu-Ji/Awesome-Azure-Pentest\n\n2. Finding complex attack paths in Kubernetes clusters\ud83e\udd79\nhttps://labs.withsecure.com/tools/icekube--finding-complex-attack-paths-in-kubernetes-clusters\n]-&gt; https://github.com/WithSecureLabs/IceKube\n\n\u26a0\ufe0f New PoC exploit for CVE-2023-46604 flaw in Apache ActiveMQ could let attackers stealthily execute malicious code. \n \nCVSS score: 10.0! Are your servers secure? \n \nLearn more about this critical vulnerability: \nhttps://thehackernews.com/2023/11/new-poc-exploit-for-apache-activemq.html\n\n\n-Cyber Security awareness-\n\u00a0\nUp2date 4 Defence Today,\nSecure Tomorrow\n@CisoasaService\n1402.09.07", "creation_timestamp": "2026-09-01T17:00:15.987059Z"}, {"uuid": "cff7ee11-cf29-46c0-ac33-bcbb0fbfa4f5", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "Telegram/y_ppx2WWa40cV5hBHui4bTL2VMdA_tcaI4VaugdhOfmt8Lg", "content": "", "creation_timestamp": "2026-09-02T01:00:05.051433Z"}, {"uuid": "3ce7ba33-3fa5-4ef7-b0f2-350e7263d865", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/hacking_Attack/126592", "content": "CVE-2023\u201346604 has emerged as a critical vulnerability in Apache ActiveMQ, an open-source message-oriented middleware (MOM) protocol\u2026Continue reading on InfoSec Write-ups \u00bb (https://infosecwriteups.com/understanding-cve-2023-46604-a-threat-to-apache-activemq-d771eb408eba?source=rss------bug_bounty-5)", "creation_timestamp": "2026-09-01T20:00:42.831257Z"}, {"uuid": "cde46343-f21e-492d-b873-9bb6eff0928e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/hacking_Attack/126590", "content": "Understanding CVE-2023\u201346604: A Threat to Apache ActiveMQ\nhttps://infosecwriteups.com/understanding-cve-2023-46604-a-threat-to-apache-activemq-d771eb408eba?source=rss------bug_bounty-5", "creation_timestamp": "2026-09-01T20:00:43.087339Z"}, {"uuid": "0daab8a5-acac-4f10-97a3-1c6a082926a1", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/hacking_Attack/126590", "content": "Understanding CVE-2023\u201346604: A Threat to Apache ActiveMQ\nhttps://infosecwriteups.com/understanding-cve-2023-46604-a-threat-to-apache-activemq-d771eb408eba?source=rss------bug_bounty-5", "creation_timestamp": "2026-09-02T01:01:03.546461Z"}, {"uuid": "579dc717-3a1c-4bd8-a115-b9acbf0d6088", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/hacking_Attack/126592", "content": "CVE-2023\u201346604 has emerged as a critical vulnerability in Apache ActiveMQ, an open-source message-oriented middleware (MOM) protocol\u2026Continue reading on InfoSec Write-ups \u00bb (https://infosecwriteups.com/understanding-cve-2023-46604-a-threat-to-apache-activemq-d771eb408eba?source=rss------bug_bounty-5)", "creation_timestamp": "2026-09-02T01:01:03.238371Z"}, {"uuid": "d0f015cd-583e-4776-9327-27022cb993f0", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "https://t.me/cissp/7331", "content": "tools\nCloud Security\n1. A collection of resources, tools and more for pentesting/securing MS Azure\nhttps://github.com/Kyuu-Ji/Awesome-Azure-Pentest\n\n2. Finding complex attack paths in Kubernetes clusters\ud83e\udd79\nhttps://labs.withsecure.com/tools/icekube--finding-complex-attack-paths-in-kubernetes-clusters\n]-&gt; https://github.com/WithSecureLabs/IceKube\n\n\u26a0\ufe0f New PoC exploit for CVE-2023-46604 flaw in Apache ActiveMQ could let attackers stealthily execute malicious code. \n \nCVSS score: 10.0! Are your servers secure? \n \nLearn more about this critical vulnerability: \nhttps://thehackernews.com/2023/11/new-poc-exploit-for-apache-activemq.html\n\n\n-Cyber Security awareness-\n\u00a0\nUp2date 4 Defence Today,\nSecure Tomorrow\n@CisoasaService\n1402.09.07", "creation_timestamp": "2026-09-02T01:03:52.776062Z"}, {"uuid": "4f267c8b-5d2f-4c4c-bd9a-fb2239659f78", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "Telegram/y_ppx2WWa40cV5hBHui4bTL2VMdA_tcaI4VaugdhOfmt8Lg", "content": "", "creation_timestamp": "2026-09-03T00:01:00.261258Z"}, {"uuid": "76e6f97c-d140-4bdd-8fa6-29552b1178be", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/hacking_Attack/126590", "content": "Understanding CVE-2023\u201346604: A Threat to Apache ActiveMQ\nhttps://infosecwriteups.com/understanding-cve-2023-46604-a-threat-to-apache-activemq-d771eb408eba?source=rss------bug_bounty-5", "creation_timestamp": "2026-09-04T01:00:05.018427Z"}, {"uuid": "26df673e-4f56-4cb5-b358-34ee265e8a51", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "https://t.me/hacking_Attack/126592", "content": "CVE-2023\u201346604 has emerged as a critical vulnerability in Apache ActiveMQ, an open-source message-oriented middleware (MOM) protocol\u2026Continue reading on InfoSec Write-ups \u00bb (https://infosecwriteups.com/understanding-cve-2023-46604-a-threat-to-apache-activemq-d771eb408eba?source=rss------bug_bounty-5)", "creation_timestamp": "2026-09-04T01:00:05.309043Z"}, {"uuid": "13555777-1fb2-4999-8db2-de5d5a592801", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "seen", "source": "Telegram/szyQ0EKV_UVNdmkffaO0C1PUabx9T7Nbdd_Nvq3q85HonyM", "content": "", "creation_timestamp": "2026-09-06T08:00:06.176086Z"}, {"uuid": "414d7634-ddf8-47ef-9e38-5bc7b8fc8828", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-46604", "type": "published-proof-of-concept", "source": "Telegram/szyQ0EKV_UVNdmkffaO0C1PUabx9T7Nbdd_Nvq3q85HonyM", "content": "", "creation_timestamp": "2026-09-07T01:00:25.056255Z"}]}