{"vulnerability": "cve-2023-4448", "sightings": [{"uuid": "b9b6932b-2f00-46de-b133-d4860280c0c8", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "MISP/3c19819c-1dac-4ef2-bfed-be5efa7e0123", "content": "", "creation_timestamp": "2023-10-10T21:10:02.000000Z"}, {"uuid": "ad2b8513-7e71-4783-ae24-bd3228bec1a2", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://www.cisa.gov/news-events/ics-advisories/icsa-24-319-08", "content": "", "creation_timestamp": "2024-11-14T12:00:00.000000Z"}, {"uuid": "cb3be289-1bd0-4733-b7e5-4b935a0610d8", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://msrc.microsoft.com/blog/2023/10/microsoft-response-to-distributed-denial-of-service-ddos-attacks-against-http/2/", "content": "", "creation_timestamp": "2023-10-10T05:00:00.000000Z"}, {"uuid": "801cec75-acb9-4dde-bf80-c09a38e8c9ac", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://infosec.exchange/users/cve/statuses/113672096276468558", "content": "", "creation_timestamp": "2024-12-18T05:09:00.171743Z"}, {"uuid": "30b50f45-607c-4136-b45b-2a55460ecaa3", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://feedsin.space/feed/CISAKevBot/items/2971900", "content": "", "creation_timestamp": "2024-12-24T20:35:25.203047Z"}, {"uuid": "cfe7df69-537e-4618-ac5c-4f0d97939145", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "MISP/3c19819c-1dac-4ef2-bfed-be5efa7e0123", "content": "", "creation_timestamp": "2025-02-23T02:10:48.000000Z"}, {"uuid": "9a49533e-6dac-41a9-84d5-4692d090d02e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://www.cisa.gov/news-events/ics-advisories/icsa-25-162-05", "content": "", "creation_timestamp": "2025-06-12T10:00:00.000000Z"}, {"uuid": "0bccf176-3c58-4d68-b927-0a057ec21161", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://www.cisa.gov/news-events/ics-advisories/icsa-25-203-04", "content": "", "creation_timestamp": "2025-07-22T10:00:00.000000Z"}, {"uuid": "fa2871fc-f7e0-47ce-b832-4f1691497bda", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://bsky.app/profile/beikokucyber.bsky.social/post/3lz2qazdnvf2w", "content": "", "creation_timestamp": "2025-09-17T21:02:40.844253Z"}, {"uuid": "89503514-8464-449e-994d-1e318fc16895", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://msrc.microsoft.com/blog/2023/10/microsoft-response-to-distributed-denial-of-service-ddos-attacks-against-http-2/", "content": "", "creation_timestamp": "2023-10-10T05:00:00.000000Z"}, {"uuid": "fa59a080-421b-4b4f-9511-dcdda6a1583c", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://bsky.app/profile/bluesky.awakari.com/post/3m6kcqrgukf2g", "content": "", "creation_timestamp": "2025-11-26T16:49:20.351181Z"}, {"uuid": "cb598b10-128e-4c5b-838d-660e26d57e62", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://bsky.app/profile/Ubuntu.activitypub.awakari.com.ap.brid.gy/post/3m6kcqvykujh2", "content": "", "creation_timestamp": "2025-11-26T16:49:32.871533Z"}, {"uuid": "46dc7ec6-d481-49c1-97c7-2ca75fdcee77", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://gist.github.com/lmolkova/34dc5c0b0f583ca80681af3c9334238d", "content": "", "creation_timestamp": "2025-11-03T23:34:52.000000Z"}, {"uuid": "1627e2ff-06a1-41b3-a2a6-182caced2241", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://gist.github.com/vietj/6cb0297e7881e7ddfbf29a64848fb7c7", "content": "", "creation_timestamp": "2026-03-03T09:26:42.000000Z"}, {"uuid": "5deb8747-68b6-4ef6-92d5-fcefa42cff57", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://gist.github.com/lmolkova/a8deca8726d3e185e2644f43182b54be", "content": "", "creation_timestamp": "2026-01-01T20:10:51.000000Z"}, {"uuid": "2d164614-88b7-48f8-8384-3a376a7f37ea", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "86ecb4e1-bb32-44d5-9f39-8a4673af8385", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://www.cert.ssi.gouv.fr/avis/CERTFR-2026-AVI-0287/", "content": "", "creation_timestamp": "2026-03-13T00:00:00.000000Z"}, {"uuid": "0b71ad3d-4625-4ea5-875c-8bbba9db852e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "86ecb4e1-bb32-44d5-9f39-8a4673af8385", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://www.govcert.gov.hk/en/alerts_detail.php?id=1130", "content": "", "creation_timestamp": "2023-10-11T04:00:00.000000Z"}, {"uuid": "14bb6d0c-765e-4759-ba77-3f46dd5e43ef", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "86ecb4e1-bb32-44d5-9f39-8a4673af8385", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://www.govcert.gov.hk/en/alerts_detail.php?id=1138", "content": "", "creation_timestamp": "2023-10-16T04:00:00.000000Z"}, {"uuid": "6cbc5d06-ab29-4cc9-8973-b0d5bfc1bf7e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "86ecb4e1-bb32-44d5-9f39-8a4673af8385", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://www.cert.ssi.gouv.fr/avis/CERTFR-2026-AVI-0316/", "content": "", "creation_timestamp": "2026-03-19T00:00:00.000000Z"}, {"uuid": "bdf4cdca-8368-4c7b-9fac-93aff5986921", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "86ecb4e1-bb32-44d5-9f39-8a4673af8385", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://www.kyberturvallisuuskeskus.fi/fi/haavoittuvuus_8/2024", "content": "", "creation_timestamp": "2024-02-09T10:14:28.000000Z"}, {"uuid": "e338b053-3127-46c8-97ab-5f86d43f1c3b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "cve-2023-44487", "type": "seen", "source": "https://gist.github.com/alon710/fd16799ed4000acf29f2381f06df6070", "content": "", "creation_timestamp": "2026-01-24T21:32:22.000000Z"}, {"uuid": "590a3ca9-726e-47e0-978f-ca645677e619", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://gist.github.com/alon710/090ce152a99e7d6c37ffe600ece932cd", "content": "", "creation_timestamp": "2026-01-24T21:32:26.000000Z"}, {"uuid": "4df9b727-3fe8-493d-83b2-821f07133b41", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44482", "type": "seen", "source": "https://gist.github.com/alon710/fd16799ed4000acf29f2381f06df6070", "content": "", "creation_timestamp": "2026-01-24T21:32:22.000000Z"}, {"uuid": "d705edc8-400f-411b-8191-b91cbf17b162", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "af0120d0-3dac-4a6a-974b-a9f33d2a9846", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "https://vulnerability.circl.lu/known-exploited-vulnerabilities-catalog/4441842a-dcf2-4b86-a575-007bad2b482a", "content": "", "creation_timestamp": "2026-02-02T12:26:48.814572Z"}, {"uuid": "a3b25cc1-7a01-4e3a-8b7b-b7cb93b6eb3e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "Telegram/I-KMl-VM-m1GjAHEWWQ8aP3mX4MIDs3Gzao9kI6rvEgKQrI", "content": "", "creation_timestamp": "2025-12-14T21:00:05.000000Z"}, {"uuid": "9eb0f99f-33e0-4403-ae88-262b46bfad32", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/cKure/11834", "content": "\u25a0\u25a0\u25a1\u25a1\u25a1 HTTP/2 Rapid Reset (CVE-2023-44487)\n\nhttps://thehackernews.com/2023/10/record-breaking-100-million-rps-ddos.html", "creation_timestamp": "2023-10-27T06:18:29.000000Z"}, {"uuid": "5bcd8514-9b0a-4688-9beb-de60730d398c", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/5374", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aCVE-2023\n\u63cf\u8ff0\uff1aTest Script for CVE-2023-44487\nURL\uff1ahttps://github.com/ByteHackr/CVE-2023-44487\n\n\u6807\u7b7e\uff1a#CVE-2023", "creation_timestamp": "2023-10-12T03:17:19.000000Z"}, {"uuid": "a12649a0-c572-4a91-9dae-339dfb0c57ed", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/5351", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aCVE-2023\n\u63cf\u8ff0\uff1aBasic vulnerability scanning to see if web servers may be vulnerable to CVE-2023-44487\nURL\uff1ahttps://github.com/bcdannyboy/CVE-2023-44487\n\n\u6807\u7b7e\uff1a#CVE-2023", "creation_timestamp": "2023-10-10T14:26:33.000000Z"}, {"uuid": "82a9b91c-bff6-4d6f-9f04-5f8387090e2b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/5439", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aCVE-2023\n\u63cf\u8ff0\uff1aQuick exploit to test out rapid reset attack (CVE-2023-44487). Note: For education purpose only\nURL\uff1ahttps://github.com/studiogangster/CVE-2023-44487\n\n\u6807\u7b7e\uff1a#CVE-2023", "creation_timestamp": "2023-10-16T11:18:09.000000Z"}, {"uuid": "6e6989e6-c87c-440c-86cd-5b87e063b8ff", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/5379", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aCVE-2023\n\u63cf\u8ff0\uff1aCVE-2023-44487\nURL\uff1ahttps://github.com/pabloec20/rapidreset\n\n\u6807\u7b7e\uff1a#CVE-2023", "creation_timestamp": "2023-10-12T07:15:13.000000Z"}, {"uuid": "63651c19-8927-4cec-a594-986a8cff85bd", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/5835", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aCVE-2023\n\u63cf\u8ff0\uff1aHighly configurable tool to check a server's vulnerability against CVE-2023-44487 by rapidly sending HEADERS and RST_STREAM frames and documenting the server's responses.\nURL\uff1ahttps://github.com/ndrscodes/http2-rst-stream-attacker\n\n\u6807\u7b7e\uff1a#CVE-2023", "creation_timestamp": "2023-11-16T17:17:59.000000Z"}, {"uuid": "25ce5472-20a4-4afc-94a0-a85151938d78", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/5944", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aCVE-2023\n\u63cf\u8ff0\uff1aA tool to check how well a system can handle Rapid Reset DDoS attacks (CVE-2023-44487).\nURL\uff1ahttps://github.com/terrorist/CVE-2023-44487\n\n\u6807\u7b7e\uff1a#CVE-2023", "creation_timestamp": "2023-11-24T18:29:20.000000Z"}, {"uuid": "139c593b-1919-4e9c-99a3-af85617dac78", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/5945", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aCVE-2023\n\u63cf\u8ff0\uff1aA tool to check how well a system can handle Rapid Reset DDoS attacks (CVE-2023-44487).\nURL\uff1ahttps://github.com/terrorist/HTTP-2-Rapid-Reset-Client\n\n\u6807\u7b7e\uff1a#CVE-2023", "creation_timestamp": "2023-11-24T19:58:11.000000Z"}, {"uuid": "b3dafe93-d806-4e46-956e-76446b06f2e9", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "https://t.me/itsec_news/3435", "content": "\u200b\u26a1\ufe0f\u041d\u043e\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 DDoS-\u0430\u0442\u0430\u043a\u0438 \u00abHTTP/2 Rapid Reset\u00bb \u0431\u044c\u0451\u0442 \u0440\u0435\u043a\u043e\u0440\u0434\u044b \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u0438.\n\n\ud83d\udcac \u041d\u043e\u0432\u0430\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f DDoS-\u0430\u0442\u0430\u043a \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u00abHTTP/2 Rapid Reset\u00bb \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 zero-day \u0430\u0442\u0430\u043a\u0438 \u0441 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u044d\u0442\u043e\u0433\u043e \u0433\u043e\u0434\u0430, \u043f\u043e\u0431\u0438\u0432 \u0432\u0441\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0440\u0435\u043a\u043e\u0440\u0434\u044b \u043f\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430\u043c.\n\n\u041d\u043e\u0432\u043e\u0441\u0442\u0438 \u043e Rapid Reset \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u044b\u0445\u043e\u0434\u0430 \u0441\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043e\u0442\u0447\u0451\u0442\u043e\u0432 \u0443 AWS , Cloudflare \u0438 Google , \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0430\u044e\u0442 \u043e \u0441\u043c\u044f\u0433\u0447\u0435\u043d\u0438\u0438 \u0430\u0442\u0430\u043a, \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u044e\u0449\u0438\u0445 155 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043f\u043e \u0434\u0430\u043d\u043d\u044b\u043c Amazon, 201 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043f\u043e \u0434\u0430\u043d\u043d\u044b\u043c Cloudflare \u0438 398 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043f\u043e \u0434\u0430\u043d\u043d\u044b\u043c Google.\n\n\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0442\u043e \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0439 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0431\u043e\u0442\u043d\u0435\u0442-\u0441\u0435\u0442\u044c \u0438\u0437 20 \u0442\u044b\u0441\u044f\u0447 \u043c\u0430\u0448\u0438\u043d. \u0410 \u0432\u0435\u0434\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0431\u043e\u0442\u043d\u0435\u0442\u044b \u0438\u0437 \u0441\u043e\u0442\u0435\u043d \u0442\u044b\u0441\u044f\u0447 \u0438 \u0434\u0430\u0436\u0435 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432. \u0427\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0430\u0447\u043d\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Rapid Reset \u0432 \u0441\u0432\u043e\u0438\u0445 \u0430\u0442\u0430\u043a\u0430\u0445?\n\n\u041a\u0430\u043a \u0431\u044b \u0442\u043e \u043d\u0438 \u0431\u044b\u043b\u043e, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b Cloudflare \u0440\u0430\u043f\u043e\u0440\u0442\u0443\u044e\u0442, \u0447\u0442\u043e \u0441 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u044d\u0442\u043e\u0433\u043e \u0433\u043e\u0434\u0430 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u0442\u044b\u0441\u044f\u0447\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 DDoS-\u0430\u0442\u0430\u043a \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0430 \u00abHTTP/2 Rapid Reset\u00bb.\n\n\u042d\u0442\u043e\u0442 \u043d\u043e\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u0442 zero-day \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c\u0443\u044e \u043a\u0430\u043a CVE-2023-44487 . \u041e\u043d \u0437\u043b\u043e\u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u043c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 HTTP/2, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0442\u043c\u0435\u043d\u044b \u043f\u043e\u0442\u043e\u043a\u0430 \u0434\u043b\u044f \u0431\u0435\u0441\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0438 \u043e\u0442\u043c\u0435\u043d\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0447\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0435 \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430.\n\n\u0412 HTTP/2 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u0437\u0430\u0449\u0438\u0442\u0430 \u0432 \u0432\u0438\u0434\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f DoS-\u0430\u0442\u0430\u043a, \u043e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e.\n\nGoogle \u043f\u043e\u044f\u0441\u043d\u0438\u043b: \u00ab\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043c\u0435\u043d\u0443, \u043a\u043b\u0438\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u00bb. \u041e\u0442\u0441\u044e\u0434\u0430 \u0438 \u0442\u0430\u043a\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u2014 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a \u0434\u043b\u044f \u0437\u043b\u043e\u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0439 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0442.\n\nCloudflare \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442, \u0447\u0442\u043e HTTP/2 \u043f\u0440\u043e\u043a\u0441\u0438 \u0438 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0443\u044f\u0437\u0432\u0438\u043c\u044b \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0430\u0442\u0430\u043a. \u041f\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f\u043c \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u044d\u0442\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0430\u0442\u0430\u043a\u0438 \u043f\u0440\u0438\u0432\u0435\u043b\u0438 \u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u043e\u0448\u0438\u0431\u043e\u043a 502 (Bad Gateway) \u0441\u0440\u0435\u0434\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 Cloudflare.\n\n\u0414\u043b\u044f \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0430\u0442\u0430\u043a Cloudflare \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u00abIP Jail\u00bb, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044f \u0438\u0445 \u0434\u043e\u0441\u0442\u0443\u043f \u043a HTTP/2 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0434\u043e\u043c\u0435\u043d\u043e\u0432 Cloudflare \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. Amazon \u0442\u0430\u043a\u0436\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0441\u0442\u043e\u044f\u043b\u0430 \u0434\u0435\u0441\u044f\u0442\u043a\u0430\u043c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u043d\u0430\u043f\u0430\u0434\u0435\u043d\u0438\u0439, \u043f\u043e\u0434\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u044f, \u0447\u0442\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0430\u0442\u0430\u043a.\n\n\u0414\u043b\u044f \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0430\u0442\u0430\u043a\u0430\u043c HTTP/2 Rapid Reset \u0432\u0441\u0435 \u0442\u0440\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e\u0442 \u0441\u0432\u043e\u0438\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 HTTP-\u0430\u0442\u0430\u043a \u0438 \u0443\u0441\u0438\u043b\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u043a DDoS \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438.\n\nCloudflare \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u0443\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0443\u043c\u0430\u043b\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u043e\u0431 \u044d\u0442\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u043b\u043e\u0441\u044c \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u0441\u044f\u0446\u0430, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430\u043c \u0441\u0438\u0441\u0442\u0435\u043c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.\n\n\u00ab\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u043b \u0442\u043e\u0442 \u0434\u0435\u043d\u044c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u044d\u0442\u043e\u0439 \u0443\u0433\u0440\u043e\u0437\u0435\u00bb \u2014 \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0432 Cloudflare.\n\n\ud83d\udd14 ITsec NEWS", "creation_timestamp": "2023-10-11T05:27:00.000000Z"}, {"uuid": "c2bc6de0-1e64-482b-bb26-23e9014610bd", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/DarkWebInformer_CVEAlerts/272", "content": "\ud83d\udd17 DarkWebInformer.com - Cyber Threat Intelligence\n\ud83d\udccc CVE ID: CVE-2023-6596\n\ud83d\udd39 Description: An incomplete fix was shipped for the Rapid Reset (CVE-2023-44487/CVE-2023-39325) vulnerability for an OpenShift Containers.\n\ud83d\udccf Published: 2024-04-25T16:00:24.215Z\n\ud83d\udccf Modified: 2025-01-06T22:01:20.326Z\n\ud83d\udd17 References:\n1. https://access.redhat.com/errata/RHSA-2024:0485\n2. https://access.redhat.com/errata/RHSA-2024:0682\n3. https://access.redhat.com/security/cve/CVE-2023-6596\n4. https://bugzilla.redhat.com/show_bug.cgi?id=2253521", "creation_timestamp": "2025-01-06T22:38:24.000000Z"}, {"uuid": "48cfd0a7-60f5-40e4-8d4a-7214b96b7d11", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/DarkWebInformer_CVEAlerts/2380", "content": "\ud83d\udd17 DarkWebInformer.com - Cyber Threat Intelligence\n\ud83d\udccc CVE ID: CVE-2024-12698\n\ud83d\udd39 Description: An incomplete fix for ose-olm-catalogd-container was issued for the Rapid Reset Vulnerability (CVE-2023-39325/CVE-2023-44487) where only unauthenticated streams were protected, not streams created by authenticated sources.\n\ud83d\udccf Published: 2024-12-18T05:07:21.026Z\n\ud83d\udccf Modified: 2025-01-21T09:28:08.318Z\n\ud83d\udd17 References:\n1. https://access.redhat.com/security/cve/CVE-2024-12698\n2. https://bugzilla.redhat.com/show_bug.cgi?id=2332674", "creation_timestamp": "2025-01-21T10:01:16.000000Z"}, {"uuid": "8cc2f7c3-d7bc-4d7a-a1fc-71012c1150e8", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/DarkWebInformer_CVEAlerts/5259", "content": "\ud83d\udd17 DarkWebInformer.com - Cyber Threat Intelligence\n\ud83d\udccc CVE ID: CVE-2024-12698\n\ud83d\udd25 CVSS Score: 6.5 (cvssV3_1, Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H)\n\ud83d\udd39 Description: An incomplete fix for ose-olm-catalogd-container was issued for the Rapid Reset Vulnerability (CVE-2023-39325/CVE-2023-44487) where only unauthenticated streams were protected, not streams created by authenticated sources.\n\ud83d\udccf Published: 2024-12-18T05:07:21.026Z\n\ud83d\udccf Modified: 2025-02-25T08:07:40.863Z\n\ud83d\udd17 References:\n1. https://access.redhat.com/errata/RHSA-2024:6122\n2. https://access.redhat.com/security/cve/CVE-2024-12698\n3. https://bugzilla.redhat.com/show_bug.cgi?id=2332674", "creation_timestamp": "2025-02-25T08:25:23.000000Z"}, {"uuid": "eeca493d-39d2-461b-9788-e609d9a41a8b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "Telegram/eiq80vTfK0uEvpSaVkLstXl9YEDfyEgGUyA39bKhe3J3sOM", "content": "", "creation_timestamp": "2026-04-24T09:00:04.000000Z"}, {"uuid": "9ea76ce0-a1dc-4915-98d2-8c4fa971bacd", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/eXCe_Fixxed/109130", "content": "# DD0S CVE List by Layer 3/4/7\n\n##  Layer 3 (Network) - ICMP, IP, NDP\n\n# 2020\n- CVE-2020-16898  &gt; Windows TCP/IP \"Bad Neighbor\" - ICMPv6 ping of death (DoS via BSOD)\n\n##  Layer 4 (Transport) - TCP, UDP\n\n# 2013\n- CVE-2013-5211  &gt; NTP Amplification Attack via 'monlist' (UDP-based)\n\n# 2016\n- CVE-2016-9244  &gt; Cisco VPN IKEv1 flood (UDP port 500 DoS)\n\n# 2018\n- CVE-2018-1000115  &gt; Memcached UDP Amplification (reflection attack)\n\n# 2018\n- CVE-2018-0171  &gt; Cisco Smart Install DoS (TCP port 4786)\n\n##  Layer 7 (Application) - HTTP, NTP, Memcached, API\n\n# 2021\n- CVE-2021-22986  &gt; F5 BIG-IP iControl REST unauth DoS/RCE (API abuse)\n\n# 2023\n- CVE-2023-44487  &gt; HTTP/2 Rapid Reset Attack - stream reset flooding\n\n# 2024\n- CVE-2024-29269  &gt; Telesquare LTE Router Cmd Injection (dapat digunakan untuk DoS chaining) {New Cve Bug}", "creation_timestamp": "2025-08-03T06:11:01.000000Z"}, {"uuid": "38201630-ee30-45d6-aa50-2807547df155", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/eXCe_Fixxed/502", "content": "# DD0S CVE List by Layer 3/4/7\n\n##  Layer 3 (Network) - ICMP, IP, NDP\n\n# 2020\n- CVE-2020-16898  &gt; Windows TCP/IP \"Bad Neighbor\" - ICMPv6 ping of death (DoS via BSOD)\n\n##  Layer 4 (Transport) - TCP, UDP\n\n# 2013\n- CVE-2013-5211  &gt; NTP Amplification Attack via 'monlist' (UDP-based)\n\n# 2016\n- CVE-2016-9244  &gt; Cisco VPN IKEv1 flood (UDP port 500 DoS)\n\n# 2018\n- CVE-2018-1000115  &gt; Memcached UDP Amplification (reflection attack)\n\n# 2018\n- CVE-2018-0171  &gt; Cisco Smart Install DoS (TCP port 4786)\n\n##  Layer 7 (Application) - HTTP, NTP, Memcached, API\n\n# 2021\n- CVE-2021-22986  &gt; F5 BIG-IP iControl REST unauth DoS/RCE (API abuse)\n\n# 2023\n- CVE-2023-44487  &gt; HTTP/2 Rapid Reset Attack - stream reset flooding\n\n# 2024\n- CVE-2024-29269  &gt; Telesquare LTE Router Cmd Injection (dapat digunakan untuk DoS chaining) {New Cve Bug}", "creation_timestamp": "2025-08-03T06:11:01.000000Z"}, {"uuid": "f40d6f25-5ef4-4536-9566-d7e4b73c6073", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/ArabGathering/2006", "content": "\u0627\u0641\u0636\u0644 \u0627\u062f\u0627\u0647 \u0644\u0641\u062d\u0635 \u062b\u063a\u0631\u0627\u062a \u0627\u0644\u0645\u0648\u0627\u0642\u0639 2023 \u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646 Kali Linux\n\nhttps://github.com/bcdannyboy/CVE-2023-44487", "creation_timestamp": "2024-02-05T12:49:03.000000Z"}, {"uuid": "f09df0e3-98cf-4ee2-97d1-3f0122302350", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/poxek/5447", "content": "MadeYouReset: \u041d\u043e\u0432\u0430\u044f HTTP/2 DoS \u0430\u0442\u0430\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0443\u0436\u0435 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043b\u0438\n#research #http2 #http1 #http #DoS #CVE\n\n\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0438\u0437 \u0422\u0435\u043b\u044c-\u0410\u0432\u0438\u0432\u0441\u043a\u043e\u0433\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438 \u043d\u043e\u0432\u0443\u044e HTTP/2 DoS \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c MadeYouReset (CVE-2025-8671). \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0443\u0436\u0435 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u044b \u043e\u0442 \u043d\u0435\u0451 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043c\u0435\u0440\u0430\u043c \u043f\u0440\u043e\u0442\u0438\u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e\u0434\u043d\u0435\u0439 \u0430\u0442\u0430\u043a\u0438 Rapid Reset.\n\nHTTP/2 stream reset - \u044d\u0442\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c HTTP-\u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u044d\u0442\u043e \u043a\u0430\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043a\u0430\u0437\u0430\u0442\u044c \"\u043d\u0435\u0432\u0430\u0436\u043d\u043e\" \u043e\u0444\u0438\u0446\u0438\u0430\u043d\u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0436\u0435 \u043f\u043e\u0448\u0451\u043b \u043d\u0430 \u043a\u0443\u0445\u043d\u044e \u0441 \u0432\u0430\u0448\u0438\u043c \u0437\u0430\u043a\u0430\u0437\u043e\u043c. \u041f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0432\u0435\u0434\u044c \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0430\u0442\u0430\u043a))\n\n\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0441 Rapid Reset:\n\nRapid Reset (CVE-2023-44487) \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u044f\u043c\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441\u0431\u0440\u043e\u0441\u0430 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 - \u043a\u043b\u0438\u0435\u043d\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u0441\u0440\u0430\u0437\u0443 \u0438\u0445 \u043e\u0442\u043c\u0435\u043d\u044f\u043b, \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0441\u0435\u0440\u0432\u0435\u0440 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0432\u043f\u0443\u0441\u0442\u0443\u044e.\n\nMadeYouReset \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0445\u0438\u0442\u0440\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434: \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u044f\u043c\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0441\u0431\u0440\u043e\u0441\u0430 \u0430\u0442\u0430\u043a\u0443\u044e\u0449\u0438\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u043d\u044b\u0435 HTTP/2 frames, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u0430\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0431\u0440\u043e\u0441 \u043f\u043e\u0442\u043e\u043a\u043e\u0432. \u042d\u0442\u043e \u043a\u0430\u043a \u043f\u043e\u0434\u0441\u0443\u043d\u0443\u0442\u044c \u043e\u0444\u0438\u0446\u0438\u0430\u043d\u0442\u0443 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043a\u0430\u0437, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0441\u0430\u043c \u0435\u0433\u043e \u043e\u0442\u043c\u0435\u043d\u0438\u043b.\n\n\u27a1\ufe0f\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0430\u0442\u0430\u043a\u0438:\n\n\u0428\u0430\u0433 1: \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\n\u0410\u0442\u0430\u043a\u0443\u044e\u0449\u0438\u0439 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 HTTP/2 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0446\u0435\u043b\u0435\u0432\u044b\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c.\n\n\u0428\u0430\u0433 2: \u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 malformed frames\n\u041a\u043b\u0438\u0435\u043d\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u043d\u044b\u0435 control frames, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u044e\u0442 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e HTTP/2.\n\n\u0428\u0430\u0433 3: \u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 reset\n\u0421\u0435\u0440\u0432\u0435\u0440, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 frames, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 \u0441\u0431\u0440\u043e\u0441 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.\n\n\u0428\u0430\u0433 4: \u0418\u0441\u0442\u043e\u0449\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432\n\u041c\u0430\u0441\u0441\u043e\u0432\u044b\u0435 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0431\u0440\u043e\u0441\u044b \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u044e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440, \u043f\u0440\u0438\u0432\u043e\u0434\u044f \u043a \u043e\u0442\u043a\u0430\u0437\u0443 \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438.\n\n\u27a1\ufe0f\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u0442\u0438\u043d\u0433 \u043c\u043e\u043c\u0435\u043d\u0442\n\n\u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e HTTP/2 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 (Cloudflare, AWS, Google) \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0442 \u0437\u0430\u0449\u0438\u0442\u0443 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f DoS'\u0430\u043c 2 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434 \u0447\u0435\u0440\u0435\u0437 Rapid Reset.\n\n\u27a1\ufe0f\u0417\u0430\u0449\u0438\u0442\u043d\u044b\u0435 \u043c\u0435\u0440\u044b:\n\n\u0414\u043b\u044f \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u0432:\n- \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 HTTP/2 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0434\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439\n- \u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 rate limiting \u0434\u043b\u044f HTTP/2 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439\n- \u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0430\u043d\u043e\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 stream reset\n\n\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u0435\u0440\u0441\u0438\u0438:\n# \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 nginx \u0441 HTTP/2\nnginx -V | grep http_v2\n\n# \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 Apache HTTP/2 \u043c\u043e\u0434\u0443\u043b\u044f\napache2ctl -M | grep http2\n\n# \u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 HTTP/2 stream resets\nnetstat -i | grep RST\n\n\ud83d\udd17\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438:\n- Cloudflare Blog\n- CVE-2025-8671\n\n\ud83c\udf1a @poxek | \ud83c\udf1a \u0411\u043b\u043e\u0433 | \ud83d\udcfa YT | \ud83d\udcfa RT | \ud83d\udcfa VK", "creation_timestamp": "2025-08-20T07:23:20.000000Z"}, {"uuid": "a1c9dc38-3a0d-48c6-97a7-ec55eb452e9e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/GithubRedTeam/5404", "content": "GitHub\u76d1\u63a7\u6d88\u606f\u63d0\u9192\uff01\uff01\uff01 \n\n\u66f4\u65b0\u4e86\uff1aCVE-2023\n\u63cf\u8ff0\uff1aTool for testing mitigations and exposure to Rapid Reset DDoS (CVE-2023-44487)\nURL\uff1ahttps://github.com/secengjeff/rapidresetclient\n\n\u6807\u7b7e\uff1a#CVE-2023", "creation_timestamp": "2023-10-13T23:58:05.000000Z"}, {"uuid": "182e7880-d19d-4ca7-b662-7bfff6520421", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/142295", "content": "https://ift.tt/Rn2XP9S\nDangerous vulnerability can be exploited to carry out massive DDoS attacks (CVE-2023-44487)", "creation_timestamp": "2023-10-10T17:18:13.000000Z"}, {"uuid": "3ee55500-b2fe-4f5a-b5fa-9eb9ea75170c", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/142410", "content": "https://ift.tt/VQflzaC\nCVE-2023-44487 HTTP/2 Rapid Reset Attack", "creation_timestamp": "2023-10-11T00:11:40.000000Z"}, {"uuid": "0f07fd36-a757-4b8a-aabc-073f209f35b2", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/cvedetector/13160", "content": "{\n  \"Source\": \"CVE FEED\",\n  \"Title\": \"CVE-2024-12698 - Rapid Reset Unauthenticated Stream Encryption Weakness in OpenShift Enterprise OSE-OLM-Catalogd Container\", \n  \"Content\": \"CVE ID : CVE-2024-12698 \nPublished : Dec. 18, 2024, 5:15 a.m. | 43\u00a0minutes ago \nDescription : An incomplete fix for ose-olm-catalogd-container was issued for the Rapid Reset Vulnerability (CVE-2023-39325/CVE-2023-44487) where only unauthenticated streams were protected, not streams created by authenticated sources. \nSeverity: 6.5 | MEDIUM \nVisit the link for more details, such as CVSS details, affected products, timeline, and more...\",\n  \"Detection Date\": \"18 Dec 2024\",\n  \"Type\": \"Vulnerability\"\n}\n\ud83d\udd39 t.me/cvedetector \ud83d\udd39", "creation_timestamp": "2024-12-18T07:00:06.000000Z"}, {"uuid": "5bbf9947-6efc-4e30-bd11-d31e6af5e188", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "Telegram/qbmK9fYth1axrfdAHmjfhl8REmMqRFPuHZYTAd9zR7ZU", "content": "", "creation_timestamp": "2023-10-22T23:25:00.000000Z"}, {"uuid": "15f49ac7-5db6-4c13-8a8e-1043bf62b46a", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/ton618cyber/2421", "content": "#exploit\n1. CVE-2025-0108:\nNginx/Apache Path Confusion to Auth Bypass in PAN-OS\nhttps://slcyber.io/blog/nginx-apache-path-confusion-to-auth-bypass-in-pan-os\n\n2. CVE-2024-42009:\nStored XSS in Roundcube Webmail\nhttps://github.com/0xbassiouny1337/CVE-2024-42009\n\n3. CVE-2022-41741, CVE-2022-41742, CVE-2023-44487 Check Script:\nhttps://github.com/moften/CVE-2022-4174_CVE-2022-41742", "creation_timestamp": "2025-02-13T06:00:18.000000Z"}, {"uuid": "ecc17044-98c2-49f3-a917-7bbebb26867d", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "Telegram/to4DFz49TeVMD13kMcjgDTlCQdMclkipo0xv3_UOuHSUk6Rm", "content": "", "creation_timestamp": "2025-03-08T04:35:52.000000Z"}, {"uuid": "f2260789-bf83-4edf-a021-746f7ac92622", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "Telegram/2gfOevRfGxWg7m4YnRYekAswaHacdDlG0r5VQWh5yloD6OA", "content": "", "creation_timestamp": "2024-05-24T01:37:47.000000Z"}, {"uuid": "e939ef7c-c794-4220-bae5-1cd8976b1e4e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "Telegram/kNLzawh1rwAujtz08dotqTVZcSbN4F51xL0g4fLomfhOjP0", "content": "", "creation_timestamp": "2025-03-22T10:52:29.000000Z"}, {"uuid": "25bdee97-9172-476e-82f1-e086c2951f00", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/ton618cyber/6638", "content": "#exploit\n1. CVE-2025-0108:\nNginx/Apache Path Confusion to Auth Bypass in PAN-OS\nhttps://slcyber.io/blog/nginx-apache-path-confusion-to-auth-bypass-in-pan-os\n\n2. CVE-2024-42009:\nStored XSS in Roundcube Webmail\nhttps://github.com/0xbassiouny1337/CVE-2024-42009\n\n3. CVE-2022-41741, CVE-2022-41742, CVE-2023-44487 Check Script:\nhttps://github.com/moften/CVE-2022-4174_CVE-2022-41742", "creation_timestamp": "2025-02-13T06:00:18.000000Z"}, {"uuid": "3eeeb0c1-06cd-4b2d-b9c3-f1a7668551fe", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "Telegram/nGbKgSILWzgIOXDvUaueKVD8bw5Qna14SkE3PPURSmNJ", "content": "", "creation_timestamp": "2023-10-22T23:24:11.000000Z"}, {"uuid": "a4a6ad08-701a-4f73-9963-c89662522aa8", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "Telegram/r4GccpksLBMuYW9OyJasEmA9bvNZyF1cM7eREPcCtwyRDg", "content": "", "creation_timestamp": "2023-11-06T20:02:46.000000Z"}, {"uuid": "144a7d9d-c336-443a-855e-a1792bbee193", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44483", "type": "seen", "source": "https://t.me/cibsecurity/72687", "content": "\u203c CVE-2023-44483 \u203c\n\nAll versions of Apache Santuario - XML Security for Java prior to 2.2.6, 2.3.4, and 3.0.3, when using the JSR 105 API, are vulnerable to an issue where a private key may be disclosed in log files when generating an XML Signature and logging with debug level is enabled.\u00c2\u00a0Users are recommended to upgrade to version 2.2.6, 2.3.4, or 3.0.3, which fixes this issue.\n\n\ud83d\udcd6 Read\n\nvia \"National Vulnerability Database\".", "creation_timestamp": "2023-11-21T07:13:10.000000Z"}, {"uuid": "4f9519df-8d6a-4162-ad70-1d0e123a5c8a", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "Telegram/CZg38d-LlgC4W2LP8NEHb37WHgQN_h5xJ4fjDzzdSDLX", "content": "", "creation_timestamp": "2023-10-23T16:44:42.000000Z"}, {"uuid": "b31d1ac7-9828-4c7e-b1af-6690fc2ff3f5", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "Telegram/GBahda7mYIxvfaDNfj8-SSU2d16LU5UYSpMKXBkR3Vhvh9Zg", "content": "", "creation_timestamp": "2023-12-03T17:00:22.000000Z"}, {"uuid": "92902834-14af-462c-b404-8392bc6ede2b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "Telegram/B_mIs0mKeaeXdym4glAe9vqmtPEkdqD4fk6zNXoJEG97mJNi", "content": "", "creation_timestamp": "2023-10-14T22:22:17.000000Z"}, {"uuid": "2964d68a-3393-41c2-b1ff-ac452b9d2796", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "https://t.me/tengkorakcybercrewz/889", "content": "\u26a1 Beware of the HTTP/2 Rapid Reset attack! \n\nA novel zero-day flaw is being exploited to launch record-breaking distributed DDoS attacks. \n\nFind out more here: https://thehackernews.com/2023/10/http2-rapid-reset-zero-day.html \n\nLearn how AWS, Cloudflare, and Google are addressing CVE-2023-44487.", "creation_timestamp": "2023-10-10T17:32:14.000000Z"}, {"uuid": "368190e1-d42a-4819-b694-de81c8861da4", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "Telegram/HVMsYUWTr9m-Towup_bLUqjBTT3mshvZui_eiU4s3oRGdI8", "content": "", "creation_timestamp": "2023-12-06T13:08:09.000000Z"}, {"uuid": "fcbb4c43-fe19-4fea-8c3f-ac6d895bd782", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/RipperSec/712", "content": "\u0633\u0652\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0645\u0650 \u0627\u0644\u0644\u0647\u0650 \u0627\u0644\u0631\u064e\u0651\u062d\u0652\u0645\u064e\u0646\u0650 \u0627\u0644\u0631\u064e\u0651\u062d\u0650\u064a\u0652\u0645\u0650\n\u0627\u0644\u0644\u0647 \u0623\u0643\u0628\u0631\u00a0\u00a0\u0627\u0644\u0644\u0647 \u0623\u0643\u0628\u0631\u00a0\u00a0\u0627\u0644\u0644\u0647 \u0623\u0643\u0628\u0631\n\u0625\u0646 \u0634\u0627\u0621 \u0627\u0644\u0644\u0647\n\nTarget : https://bankjerusalem.co.il\nIP : 66.22.119.20\nHostname : 66.22.119.20\nISP : Redware Inc &amp; Dc Protection Ltd\nInfo: No WAF detected by the generic detection\n\nPORT : 53 filtered domain\nPORT : 80 http\nPORT : 443 https \nMETHOD : TCP/UDP\nDomain : isoc.org.il 51.17.123.48 \nASN: AS16509 \nCountry: IL \nCity: TEL AVIV \nDomain: Amazonaws.com | IIX.NET.IL | ISOC.org.il | \nPorts: 80 | 443 | \nHTTP Status: 301 | \nProvider: Amazon.com, Inc. \nOrganization: A100 Row Inc \nPossible vulnerabilities: CVE-2021-3618 | CVE-2023-44487 |\n\nGreetz:- All Muslim Hackers\n\n#TengkorakCyberCrew \n#EagleCyberCrew\n#RipperSec\n#KhalifahCyberCrew\n#HelangMerahGroup \n#LaskarPembebasanPalestina\n#TeamCyberAbabil\n#Cyberwar PaLestiNe 3.0\n#TABM MALAYSIA-PALESTINE (MyPA)\n\nCome join us!!\nhttps://t.me/MalaysiaHacktivist\nhttps://t.me/MalaysiaHacktivistz", "creation_timestamp": "2024-02-12T14:43:23.000000Z"}, {"uuid": "d8263b70-02df-4137-abda-9edfd12ba62c", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/Githuseo/260", "content": "https://github.com/bcdannyboy/CVE-2023-44487\n\u57fa\u672c\u6f0f\u6d1e\u626b\u63cf\uff0c\u67e5\u770b Web \u670d\u52a1\u5668\u662f\u5426\u5bb9\u6613\u53d7\u5230 CVE-2023-44487 \u7684\u653b\u51fb", "creation_timestamp": "2023-10-14T06:16:19.000000Z"}, {"uuid": "f9c4bd82-8810-409f-b298-fa81eb91b1d0", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "https://t.me/arpsyndicate/4903", "content": "#ExploitObserverAlert\n\nCVE-2023-44487\n\nDESCRIPTION: Exploit Observer has 430 entries in 26 file formats related to CVE-2023-44487. The HTTP/2 protocol allows a denial of service (server resource consumption) because request cancellation can reset many streams quickly, as exploited in the wild in August through October 2023.\n\nFIRST-EPSS: 0.739260000\nNVD-IS: 3.6\nNVD-ES: 3.9\nARPS-PRIORITY: 0.7642706", "creation_timestamp": "2024-05-02T21:31:29.000000Z"}, {"uuid": "521960a3-9f55-42a7-846a-4303d217a000", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "https://t.me/arpsyndicate/1965", "content": "#ExploitObserverAlert\n\nCVE-2023-44487\n\nDESCRIPTION: Exploit Observer has 85 entries related to CVE-2023-44487. The HTTP/2 protocol allows a denial of service (server resource consumption) because request cancellation can reset many streams quickly, as exploited in the wild in August through October 2023.\n\nFIRST-EPSS: 0.601570000\nNVD-IS: 3.6\nNVD-ES: 3.9", "creation_timestamp": "2023-12-18T10:40:38.000000Z"}, {"uuid": "b2d190ea-fba9-4750-81f3-a13a087111d1", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "https://t.me/arpsyndicate/1807", "content": "#ExploitObserverAlert\n\nCVE-2023-44487\n\nDESCRIPTION: Exploit Observer has 85 entries related to CVE-2023-44487. The HTTP/2 protocol allows a denial of service (server resource consumption) because request cancellation can reset many streams quickly, as exploited in the wild in August through October 2023.\n\nFIRST-EPSS: 0.601570000\nNVD-IS: 3.6\nNVD-ES: 3.9", "creation_timestamp": "2023-12-12T12:09:50.000000Z"}, {"uuid": "81d1fc8e-ff6b-4c4d-9a61-5774bedc93c0", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "Telegram/VFcH9B5JY0UbDEuI_6uPR4ZyxdeHpWL3DIgaSyeDZpcSYg", "content": "", "creation_timestamp": "2023-10-10T17:52:37.000000Z"}, {"uuid": "aedbd4e6-7dba-43a2-983c-b5a2f9d3bbbb", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/nodejsleaks/347", "content": "Private | Custom method | Node.JS\n(Using HTTP/2 Rapid-Reset) [Exploit CVE-2023-44487]\n- Method bypass HTTP-DDoS \n- Method sending big requests/s\n- Using 1 server for graph (8 core | 32 ram | 1 gb/port)\n- More: 8 threads | 128 rate | 5 connections\n\nRegards, @mitigations \u263a\ufe0f", "creation_timestamp": "2023-11-26T00:44:52.000000Z"}, {"uuid": "d78edd4a-6bac-44c3-be95-d8d268f7e81b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "Telegram/-AN5Wb8nooNX5gMsGMlz_MhqzDd5BvuXA1c7foEp2HLAQVoEiA", "content": "", "creation_timestamp": "2025-03-24T17:54:12.000000Z"}, {"uuid": "02856129-72ef-44fc-a947-83fe51dd3c57", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "https://t.me/arpsyndicate/65", "content": "#ExploitObserverAlert\n\nCVE-2023-44487\n\nDESCRIPTION: Exploit Observer has 54 entries related to CVE-2023-44487. The HTTP/2 protocol allows a denial of service (server resource consumption) because request cancellation can reset many streams quickly, as exploited in the wild in August through October 2023.\n\nFIRST-EPSS: 0.527480000\nNVD-IS: 3.6\nNVD-ES: 3.9", "creation_timestamp": "2023-11-10T22:12:13.000000Z"}, {"uuid": "86dbd8bb-d7b1-4ea0-9fcc-fb9eaf272b8b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "Telegram/vO0O31bLCGt8dsAHeykDxjvD1rdqLB0PRbsJDam8FXp0AeE", "content": "", "creation_timestamp": "2025-02-02T06:12:15.000000Z"}, {"uuid": "1487f790-157c-42b8-97f5-cbcd45d39811", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/GhostClanOfficial/646", "content": "DDoS methods\n\n1. Find the target domain example.com\n\n2. Try ping to see the IP: ping domain.com\n\n3. Copy the IP address and search near iplocation.net\n\n4. Look at the IP location that points to the correct country or not.\n\n5. If the IP points to the right country, most likely the server is there and can continue the DoS attack with Hping3, LOIC, RUDY and others.\n\n6. If the IP points to a cloud such as google, aws, akamai or waf such as cloudflare, imperva and others, then it cannot be DDoS because it is not the correct IP.\n\n7. To get the correct IP, you can see his DNS records at intodns.com/  . Scroll to look at SOA, MX and CNAME records.\n\n8. Try searching each IP at iplocation.net to see if it points to the correct country or not.\n\n9. Then if it is correct, repeat step 5 earlier. If there is no IP that points to the correct server or country, then look for another target.\n\nGood luck.\n\nViva Operation Israel Hackers!\n\n#Oplsrael - #FreePalestine - #AntiZionism - #Fucklsrael - #Anonymous\n\nhttps://github.com/sp00fing/ddos/blob/main/Layer-7/XML-RPC-Pingback-C/xml\n\nhttps://github.com/MatrixTM/MHDDoS\n\nhttps://ufonet.03c8.net/\n\nhttps://github.com/R00tS3c/DDOS-RootSec\n\nhttps://github.com/LimerBoy/Impulse\n\nlatest 0day for Ddos \n\nCVE-2023-44487\n\nGHOSTS of Palestine \ud83c\uddf5\ud83c\uddf8", "creation_timestamp": "2023-10-14T02:29:27.000000Z"}, {"uuid": "019c7fb0-ed61-4b7f-b9bc-a8f6c88d78f3", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "Telegram/3j8I0isFmLAbte1B6AblKmXFCQRKV1G1C2a7XeAcW0NPN4blEg", "content": "", "creation_timestamp": "2024-08-15T17:04:56.000000Z"}, {"uuid": "6f571705-200e-44e4-bf01-1a92b44e8566", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/LiberationofAlAqsa/905", "content": "\u0627\u0641\u0636\u0644 \u0627\u062f\u0627\u0647 \u0644\u0641\u062d\u0635 \u062b\u063a\u0631\u0627\u062a \u0627\u0644\u0645\u0648\u0627\u0642\u0639 2023 \u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646 Kali Linux\n\nhttps://github.com/bcdannyboy/CVE-2023-44487", "creation_timestamp": "2023-12-06T08:20:41.000000Z"}, {"uuid": "8e7b485e-7de6-4c24-9246-7367492741cf", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "Telegram/HyzQRr244NBXwXjpKZdXabuhBv6fwfetR_-gT7B2VI_Bgw0RAQ", "content": "", "creation_timestamp": "2025-01-19T11:49:25.000000Z"}, {"uuid": "8fb6dc51-ac65-442b-ad5b-fbc4981374b5", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "Telegram/Rk-2-MiKSRGO20vlyKqEDzRfwRCTNRmhpRVm2GIEz2ghE7giMw", "content": "", "creation_timestamp": "2025-01-19T11:41:40.000000Z"}, {"uuid": "93efd626-b250-4d5f-98fd-0523ae4cb559", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "Telegram/gcfu4uTEIg28qWTvcVOCKT3PEjHzicQ5yB2xIu5kEy-ne1tA", "content": "", "creation_timestamp": "2023-12-12T10:37:24.000000Z"}, {"uuid": "6268b36e-8bee-4c44-874b-f5b1b2ddadad", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "Telegram/9N9r8ZPqLAugg6RT8SXcczSP20TZGse6ot0ZEzE89QFl45o", "content": "", "creation_timestamp": "2023-10-12T14:00:35.000000Z"}, {"uuid": "03d74977-9c30-43f6-86d0-9a32a4c82cd8", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "Telegram/tdSiYql22npcty9iPwOM0bQpYA2KFxntFACu-Cz8kZF6tTA", "content": "", "creation_timestamp": "2023-10-12T07:19:05.000000Z"}, {"uuid": "aa2881c7-1313-43c8-9bab-cbb2ac1be955", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "Telegram/0q0wDMSotjqkkaTjo-wpulHVh7Xs1Oq3u_HHQm_rYiQEfKI", "content": "", "creation_timestamp": "2023-10-12T07:00:13.000000Z"}, {"uuid": "8931c6ac-2c02-4ea4-b57b-ac7371748936", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "Telegram/NmGuvqrxR56psaGwEYBH3Ex1ej1rR6FgCU_OcnrJpJ0j92g", "content": "", "creation_timestamp": "2023-10-12T04:56:06.000000Z"}, {"uuid": "c6f928a0-a754-4d6c-9e73-98357678f96a", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "https://t.me/tengkorakcybercrewz/40", "content": "\u26a1 Beware of the HTTP/2 Rapid Reset attack! \n\nA novel zero-day flaw is being exploited to launch record-breaking distributed DDoS attacks. \n\nFind out more here: https://thehackernews.com/2023/10/http2-rapid-reset-zero-day.html \n\nLearn how AWS, Cloudflare, and Google are addressing CVE-2023-44487.", "creation_timestamp": "2023-10-10T17:32:14.000000Z"}, {"uuid": "8322e892-c5af-49a2-a9fd-c1b963013597", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/itARMYofUkraine2022_INT/27624", "content": "Google \u0442\u0430 Amazon \u043d\u0435\u0449\u043e\u0434\u0430\u0432\u043d\u043e \u0432\u0456\u0434\u0431\u0438\u043b\u0438 \u043d\u0430\u0439\u0431\u0456\u043b\u044c\u0448\u0443 \u0432 \u0456\u0441\u0442\u043e\u0440\u0456\u0457 DDoS-\u0430\u0442\u0430\u043a\u0443 \u0437 \u043f\u0456\u043a\u043e\u043c \u0443 398 \u043c\u0456\u043b\u044c\u0439\u043e\u043d\u0456\u0432 \u0437\u0430\u043f\u0438\u0442\u0456\u0432 \u0437\u0430 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u044e\u0447\u0438 \u0432\u0440\u0430\u0437\u043b\u0438\u0432\u0456\u0441\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 HTTP/2. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0454\u0442\u044c\u0441\u044f \u043d\u0435\u0433\u0430\u0439\u043d\u043e \u043e\u043d\u043e\u0432\u0438\u0442\u0438 \u0432\u0441\u0456 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0441\u0435\u0440\u0432\u0456\u0441\u0438 \u0434\u043b\u044f \u0443\u0441\u0443\u043d\u0435\u043d\u043d\u044f \u0432\u0440\u0430\u0437\u043b\u0438\u0432\u043e\u0441\u0442\u0456 CVE-2023-44487, \u0449\u043e\u0431 \u0437\u0430\u043f\u043e\u0431\u0456\u0433\u0442\u0438 \u043f\u043e\u0434\u0456\u0431\u043d\u0438\u043c \u0437\u0430\u0433\u0440\u043e\u0437\u0430\u043c. \u041c\u0430\u0441\u0448\u0442\u0430\u0431 \u0442\u0430 \u0441\u043a\u043b\u0430\u0434\u043d\u0456\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u0445 \u0430\u0442\u0430\u043a \u0441\u0442\u0440\u0456\u043c\u043a\u043e \u0437\u0440\u043e\u0441\u0442\u0430\u044e\u0442\u044c, \u0449\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u043d\u0438\u0439 \u0440\u0438\u0437\u0438\u043a \u0434\u043b\u044f \u0432\u0441\u0435\u0441\u0432\u0456\u0442\u043d\u044c\u043e\u0457 \u043e\u043d\u043b\u0430\u0439\u043d-\u0456\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438. \u041e\u043d\u043e\u0432\u043b\u044e\u0439\u0442\u0435\u0441\u044c \u0442\u0430 \u0437\u0430\u0445\u0438\u0449\u0430\u0439\u0442\u0435 \u0441\u0432\u043e\u0457 \u0441\u0438\u0441\u0442\u0435\u043c\u0438.\n\n\u041f\u0440\u0438\u0454\u0434\u043d\u0443\u0439\u0442\u0435\u0441\u044c \u0434\u043e \u043d\u0430\u0448\u043e\u0433\u043e \u0447\u0430\u0442\u0443 \u0434\u043b\u044f \u0448\u0432\u0438\u0434\u043a\u043e\u0457 \u043a\u0456\u0431\u0435\u0440\u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0438.\n--\nGoogle and Amazon recently thwarted the largest DDoS attack ever, peaking at 398 million requests per second, exploiting HTTP/2 protocol vulnerability. Urgent action is advised for all internet-facing services to patch against CVE-2023-44487 to prevent similar threats. The scale and sophistication of such attacks are rapidly growing, representing a significant risk to online infrastructure globally. Stay updated on patches and safeguard your systems.\n\nJoin our chat for quick cyberhelp.", "creation_timestamp": "2023-11-10T09:04:41.000000Z"}, {"uuid": "669d8567-6915-488f-b104-ab55d65704df", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "https://t.me/KomunitiSiber/914", "content": "HTTP/2 Rapid Reset Zero-Day Vulnerability Exploited to Launch Record DDoS Attacks\nhttps://thehackernews.com/2023/10/http2-rapid-reset-zero-day.html\n\nAmazon Web Services (AWS), Cloudflare, and Google on Tuesday said they took steps to mitigate record-breaking distributed denial-of-service (DDoS) attacks that relied on a novel technique called HTTP/2 Rapid Reset.\nThe\u00a0layer 7 attacks\u00a0were detected in late August 2023, the companies said in a coordinated disclosure. The cumulative susceptibility to this attack is being tracked as\u00a0CVE-2023-44487,", "creation_timestamp": "2023-10-10T18:01:38.000000Z"}, {"uuid": "fa9fefc1-1a06-4a56-b21e-ddd7c163c998", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "Telegram/qDzkx44siSc8n4X8sjQ5ZjiFphGSFajZZfESRCa-0oTFNSE", "content": "", "creation_timestamp": "2025-04-23T05:00:06.000000Z"}, {"uuid": "552f2b7b-7141-4961-a88e-2d8a2ebe66d2", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "Telegram/ZJp_VCEhaga9OM9NBvz45K3ssC6nL69JeV_dGqoHwNSpsGU", "content": "", "creation_timestamp": "2025-04-15T05:00:08.000000Z"}, {"uuid": "04d2765a-d795-4abb-bcee-a1019c9fe2c8", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "Telegram/IYQCJdoDg1iSlKbn8ZslzoAumxbXC4NXxOL9Gs1tonDBX0k", "content": "", "creation_timestamp": "2025-01-19T15:39:14.000000Z"}, {"uuid": "8372b2e2-c493-4456-b3b6-3ddf15de3088", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "Telegram/dkxB3yNasTV2nnby0yGIeEfvEQ0j97pj5WFC2YsD2kZioxQ", "content": "", "creation_timestamp": "2025-02-25T10:00:05.000000Z"}, {"uuid": "d5c4fba7-d720-4355-b5ee-2f57aeb240dc", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "Telegram/lVJgfs5XAHvajpl794U45S89a4qLDVmI9MW4eeqQE3QLlDc", "content": "", "creation_timestamp": "2025-02-19T16:00:09.000000Z"}, {"uuid": "da08e68f-7fb9-4e8e-8836-04b4f0614ca1", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ashaburroyah313/870", "content": "\u0633\u0652\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0640\u0645\u0650 \u0627\u0644\u0644\u0647\u0650 \u0627\u0644\u0631\u064e\u0651\u062d\u0652\u0645\u064e\u0646\u0650 \u0627\u0644\u0631\u064e\u0651\u062d\u0650\u064a\u0652\u0645\u0650\n\u0627\u0644\u0644\u0647 \u0623\u0643\u0628\u0631\u00a0\u00a0\u0627\u0644\u0644\u0647 \u0623\u0643\u0628\u0631\u00a0\u00a0\u0627\u0644\u0644\u0647 \u0623\u0643\u0628\u0631\n\u0625\u0646 \u0634\u0627\u0621 \u0627\u0644\u0644\u0647\n\nTarget : https://bankjerusalem.co.il\nIP : 66.22.119.20\nHostname : 66.22.119.20\nISP : Redware Inc &amp; Dc Protection Ltd\nInfo: No WAF detected by the generic detection\n\nPORT : 53 filtered domain\nPORT : 80 http\nPORT : 443 https \nMETHOD : TCP/UDP\nDomain : isoc.org.il 51.17.123.48 \nASN: AS16509 \nCountry: IL \nCity: TEL AVIV \nDomain: Amazonaws.com | IIX.NET.IL | ISOC.org.il | \nPorts: 80 | 443 | \nHTTP Status: 301 | \nProvider: Amazon.com, Inc. \nOrganization: A100 Row Inc \nPossible vulnerabilities: CVE-2021-3618 | CVE-2023-44487 |\n\nGreetz:- All Muslim Hackers\n\n#TengkorakCyberCrew \n#EagleCyberCrew\n#RipperSec\n#KhalifahCyberCrew\n#HelangMerahGroup \n#LaskarPembebasanPalestina\n#TeamCyberAbabil\n#Cyberwar PaLestiNe 3.0\n#TABM MALAYSIA-PALESTINE (MyPA)\n\nCome join us!!\nhttps://t.me/MalaysiaHacktivist\nhttps://t.me/MalaysiaHacktivistz", "creation_timestamp": "2024-02-12T14:57:44.000000Z"}, {"uuid": "a529a5bd-9fc7-4108-8ecb-17bf9749213a", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/leak_db2/1220", "content": "Examples for implementing cve-2023-44487\n\nhttps://github.com/nxenon/cve-2023-44487", "creation_timestamp": "2023-11-10T10:18:59.000000Z"}, {"uuid": "a931c4b4-984d-4b0b-8cc5-8aaa0626c854", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/itarmyofukraine2022/1786", "content": "Google \u0442\u0430 Amazon \u043d\u0435\u0449\u043e\u0434\u0430\u0432\u043d\u043e \u0432\u0456\u0434\u0431\u0438\u043b\u0438 \u043d\u0430\u0439\u0431\u0456\u043b\u044c\u0448\u0443 \u0432 \u0456\u0441\u0442\u043e\u0440\u0456\u0457 DDoS-\u0430\u0442\u0430\u043a\u0443 \u0437 \u043f\u0456\u043a\u043e\u043c \u0443 398 \u043c\u0456\u043b\u044c\u0439\u043e\u043d\u0456\u0432 \u0437\u0430\u043f\u0438\u0442\u0456\u0432 \u0437\u0430 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u044e\u0447\u0438 \u0432\u0440\u0430\u0437\u043b\u0438\u0432\u0456\u0441\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 HTTP/2. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0454\u0442\u044c\u0441\u044f \u043d\u0435\u0433\u0430\u0439\u043d\u043e \u043e\u043d\u043e\u0432\u0438\u0442\u0438 \u0432\u0441\u0456 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0441\u0435\u0440\u0432\u0456\u0441\u0438 \u0434\u043b\u044f \u0443\u0441\u0443\u043d\u0435\u043d\u043d\u044f \u0432\u0440\u0430\u0437\u043b\u0438\u0432\u043e\u0441\u0442\u0456 CVE-2023-44487, \u0449\u043e\u0431 \u0437\u0430\u043f\u043e\u0431\u0456\u0433\u0442\u0438 \u043f\u043e\u0434\u0456\u0431\u043d\u0438\u043c \u0437\u0430\u0433\u0440\u043e\u0437\u0430\u043c. \u041c\u0430\u0441\u0448\u0442\u0430\u0431 \u0442\u0430 \u0441\u043a\u043b\u0430\u0434\u043d\u0456\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u0445 \u0430\u0442\u0430\u043a \u0441\u0442\u0440\u0456\u043c\u043a\u043e \u0437\u0440\u043e\u0441\u0442\u0430\u044e\u0442\u044c, \u0449\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u043d\u0438\u0439 \u0440\u0438\u0437\u0438\u043a \u0434\u043b\u044f \u0432\u0441\u0435\u0441\u0432\u0456\u0442\u043d\u044c\u043e\u0457 \u043e\u043d\u043b\u0430\u0439\u043d-\u0456\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438. \u041e\u043d\u043e\u0432\u043b\u044e\u0439\u0442\u0435\u0441\u044c \u0442\u0430 \u0437\u0430\u0445\u0438\u0449\u0430\u0439\u0442\u0435 \u0441\u0432\u043e\u0457 \u0441\u0438\u0441\u0442\u0435\u043c\u0438.\n\n\u041f\u0440\u0438\u0454\u0434\u043d\u0443\u0439\u0442\u0435\u0441\u044c \u0434\u043e \u043d\u0430\u0448\u043e\u0433\u043e \u0447\u0430\u0442\u0443 \u0434\u043b\u044f \u0448\u0432\u0438\u0434\u043a\u043e\u0457 \u043a\u0456\u0431\u0435\u0440\u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0438.\n--\nGoogle and Amazon recently thwarted the largest DDoS attack ever, peaking at 398 million requests per second, exploiting HTTP/2 protocol vulnerability. Urgent action is advised for all internet-facing services to patch against CVE-2023-44487 to prevent similar threats. The scale and sophistication of such attacks are rapidly growing, representing a significant risk to online infrastructure globally. Stay updated on patches and safeguard your systems.\n\nJoin our chat for quick cyberhelp.", "creation_timestamp": "2023-11-10T09:01:52.000000Z"}, {"uuid": "51d9cb49-1e6e-4eb7-bf15-7707e4fe583b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/murdernet/845", "content": "Planned Updates Regarding Upcoming BROWSER Method Soon To Be Added!\n\n+ Improved Detection Against Cloudflares HTTP DDOS &amp; UAM Detection.\n+ Improved Detection Against Cloudflares JS Challenges.\n+ Improved Detection Against MyArena JS Challenges.\n+ Improved Detection Against vShield JS Challenges &amp; Browser Checks.\n\n- Current Research - \n- HTTP/2 Rapid Reset Exploit (CVE-2023-44487)\n- 1:1 Browser Emulation Regarding a Mix Of HTTP/2 + HTTP/3 Versions\n\n- @bassings | Admin &amp; Method Development", "creation_timestamp": "2024-01-08T02:22:06.000000Z"}, {"uuid": "ed872285-81ec-4ee4-b40a-d2d8980cc85c", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "https://t.me/proxy_bar/1781", "content": "CVE-2023-44487\n\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 HTTP/2\n\u041f\u043e\u043a\u0430 exploit (\u0437\u0430\u0442\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 DOS) \u043f\u043e\u043b\u0437\u0430\u043b \u0432 \u0434\u0438\u043a\u043e\u0439 \u043f\u0440\u0438\u0440\u043e\u0434\u0435 \u043f\u043e\u0434 \u0430\u0442\u0430\u043a\u0443 \u043f\u043e\u043f\u0430\u043b\u0438 Google, AWS, CloudFlare \\ etc\n\u041f\u0438\u043a \u0430\u0442\u0430\u043a\u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b 389 000 000 (\u0434\u0430 \u0434\u0430) \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443.\n\u041d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u0432\u0441\u0435 \u044d\u0442\u043e \u0443\u043f\u043b\u044b\u043b\u043e ))))\n\u041a\u0441\u0442\u0430\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043e\u0442\u0447\u0435\u0442 \u0435\u0441\u0442\u044c \u0443 HAproxy, \u0442\u0438\u043f\u0430 \u043d\u0430\u0448\u0430 \u0445\u0430\u0442\u0430 \u0441 \u043a\u0440\u0430\u044e \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0430\u0448 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0435 \u0414\u043e\u0421\u0438\u0442\u0441\u044f \u044d\u0442\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c\u044e.\n\nlink 1\nlink 2\nlink 3\nlink 4\nlink 5\nwhat the fuck notes \n\n#DoS #HA", "creation_timestamp": "2023-10-16T23:22:24.000000Z"}, {"uuid": "e2326c9f-19b4-422e-897e-0cab74ae0fbc", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/GrayHatsHack/6372", "content": "DDoS methods\n\n1. Find the target domain example.com\n\n2. Try ping to see the IP: ping domain.com\n\n3. Copy the IP address and search near iplocation.net\n\n4. Look at the IP location that points to the correct country or not.\n\n5. If the IP points to the right country, most likely the server is there and can continue the DoS attack with Hping3, LOIC, RUDY and others.\n\n6. If the IP points to a cloud such as google, aws, akamai or waf such as cloudflare, imperva and others, then it cannot be DDoS because it is not the correct IP.\n\n7. To get the correct IP, you can see his DNS records at intodns.com/  . Scroll to look at SOA, MX and CNAME records.\n\n8. Try searching each IP at iplocation.net to see if it points to the correct country or not.\n\n9. Then if it is correct, repeat step 5 earlier. If there is no IP that points to the correct server or country, then look for another target.\n\nGood luck.\n\nViva Operation Israel Hackers!\n\n#Oplsrael - #FreePalestine - #AntiZionism - #Fucklsrael - #Anonymous\n\nhttps://github.com/sp00fing/ddos/blob/main/Layer-7/XML-RPC-Pingback-C/xml\n\nhttps://github.com/MatrixTM/MHDDoS\n\nhttps://ufonet.03c8.net/\n\nhttps://github.com/R00tS3c/DDOS-RootSec\n\nhttps://github.com/LimerBoy/Impulse\n\nlatest 0day for Ddos \n\nCVE-2023-44487\n\nhttps://t.me/GrayHatsHack", "creation_timestamp": "2024-05-30T09:10:39.000000Z"}, {"uuid": "6fdfc40f-7eb0-4a0d-bf4f-5c8419ccdd23", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "https://t.me/true_secator/6092", "content": "\u0412\u0435\u0434\u0443\u0449\u0438\u0435 \u0432\u0435\u043d\u0434\u043e\u0440\u044b ICS Siemens, Schneider Electric, Rockwell Automation \u0438 Aveva \u0432\u044b\u043a\u0430\u0442\u0438\u043b\u0438 \u0441\u0432\u043e\u0438 \u0435\u0436\u0435\u043c\u0435\u0441\u044f\u0447\u043d\u044b\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f ICS.\n\nSiemens\u00a0\u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u0430 9 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0439, \u043e\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043e\u043a\u043e\u043b\u043e 50 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u041f\u0440\u0438\u0447\u0435\u043c \u043e\u043a\u043e\u043b\u043e 30 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432 \u0431\u044b\u043b\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u0432 SINEC Network Management System (NMS), \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0438 \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u043e\u0446\u0435\u043d\u043a\u0443 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0441\u0442\u0438.\n\n\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u044e\u0442 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u0432 \u0438\u0445 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0430\u043a\u0436\u0435 \u0432\u0445\u043e\u0434\u0438\u0442 CVE-2023-44487, \u043a\u043e\u0442\u043e\u0440\u0430\u044f\u00a0\u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0434\u043b\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043d\u044b\u0445 DDoS-\u0430\u0442\u0430\u043a HTTP/2 Rapid Reset.\n\n\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, Siemens \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u043b\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a RCE, DoS \u0438\u043b\u0438 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u0445 Intralog WMS, Teamcenter Visualization, JT2Go, NX, Scalance M-800, Sinec Traffic Analyzer \u0438 Comos.\n\n\u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0441\u0442\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043f\u0430\u0440\u043e\u043b\u0435\u043c \u0432 Location Intelligence \u0438 Logo.\n\nSchneider Electric\u00a0\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b\u0430 \u0434\u0432\u0430 \u043d\u043e\u0432\u044b\u0445 \u0431\u044e\u043b\u043b\u0435\u0442\u0435\u043d\u044f, \u043e\u0434\u0438\u043d \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043e\u0431 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 EcoStruxure Machine SCADA Expert \u0438 Blue Open Studio, \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0435\u0439 \u0438\u0437-\u0437\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 Aveva, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u043b\u0438 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a EoP.\n\n\u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0431\u044e\u043b\u043b\u0435\u0442\u0435\u043d\u0435 Schneider \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 DoS-\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0441\u0442\u0438, \u0432\u043b\u0438\u044f\u044e\u0449\u0443\u044e \u043d\u0430 \u041f\u041e Accutech Manager, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0435 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0431\u0435\u0441\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 Accutech. \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 \u0431\u0435\u0437 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438.\n\n\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u041f\u041e\u00a0Aveva\u00a0\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e \u0442\u0440\u0435\u0445 \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f\u0445 - \u0432\u0441\u0435 \u0441 \u0432\u044b\u0441\u043e\u043a\u0438\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0441\u0442\u0438.\n\n\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c DoS \u0432 SuiteLink Server, \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0438 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0432 Aveva Reports for Operations, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0448\u0438\u0431\u043a\u0443 SQL-\u0438\u043d\u044a\u0435\u043a\u0446\u0438\u0438 \u0432 Historian Server.\n\nRockwell Automation\u00a0\u0437\u0430\u044f\u0432\u0438\u043b\u0430 \u043e \u0434\u0435\u0432\u044f\u0442\u0438 \u043d\u043e\u0432\u044b\u0445 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u0445 \u0432 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0438 10 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0441\u043e \u0441\u0440\u0435\u0434\u043d\u0438\u043c \u0438 \u0432\u044b\u0441\u043e\u043a\u0438\u043c \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0441\u0442\u0438.\u00a0\n\n\u0421\u0440\u0435\u0434\u0438 \u043d\u0438\u0445 \u043e\u0448\u0438\u0431\u043a\u0438 RCE \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u0445 AADvance \u0438 FactoryTalk, \u0430 \u0442\u0430\u043a\u0436\u0435 DoS - \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445 CompactLogix, GuardLogix, ControlLogix \u0438 Micro.\n\n\u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e Rockwell \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0443 \u043e\u0431\u0445\u043e\u0434\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0432 DataMosaix, \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0430 DLL \u0432 Emulate3D \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 \u043d\u0435\u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 Pavilion8.", "creation_timestamp": "2024-08-14T16:00:07.000000Z"}, {"uuid": "de375d5a-4115-4b9e-af13-0dbb458dc61e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/true_secator/5396", "content": "Fortinet \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442 \u043e \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\u0438 \u0432 FortiOS SSL VPN, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u0442\u0430\u043a\u0430\u0445.\n\nCVE-2024-21762 (FG-IR-24-015) \u0438\u043c\u0435\u0435\u0442 \u0440\u0435\u0439\u0442\u0438\u043d\u0433 CVSS 9,6 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u0432 FortiOS.\n\n\u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u043d\u0435\u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u044b.\n\n\u0414\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0438, Fortinet \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043e \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439, \u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044f - \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c, \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0432 SSL VPN \u043d\u0430 \u0441\u0432\u043e\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0441 FortiOS.\n\n\u0427\u0442\u043e \u0436\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0434\u0438\u043a\u043e\u0439 \u043f\u0440\u0438\u0440\u043e\u0434\u0435, Fortinet \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439, \u0440\u0430\u0432\u043d\u043e \u0438 \u0442\u043e\u043c, \u043a\u0442\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c.\n\n\u0418\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043b\u0438\u0448\u044c \u0442\u043e, \u0447\u0442\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043d\u0430\u0440\u044f\u0434\u0443 \u0441 \u043d\u0435\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a \u0440\u0430\u0441\u043a\u0440\u044b\u043b \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438 \u043f\u043e \u0434\u0440\u0443\u0433\u0438\u043c \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430\u043c, \u0441\u0440\u0435\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445: CVE-2024-23113 (\u0440\u0435\u0439\u0442\u0438\u043d\u0433 9,8), CVE-2023-44487 \u0438 CVE-2023-47537 (\u043e\u0431\u0435 \u0441\u043e \u0441\u0440\u0435\u0434\u043d\u0438\u043c \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u043e\u043c). \u041e\u0434\u043d\u0430\u043a\u043e \u0438\u0445 \u043d\u0435 \u043e\u0442\u043c\u0435\u0442\u0438\u043b\u0438 \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0435.\n\n\u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0432 \u0432\u0438\u0434\u0443 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0441\u0442\u0438 \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f CVE-2024-21762 \u0432 \u0430\u0442\u0430\u043a\u0430\u0445, \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 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.", "creation_timestamp": "2024-02-09T11:20:05.000000Z"}, {"uuid": "51a3ed8c-0514-4a7d-bb76-54c6a9e1c0d1", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/true_secator/5856", "content": "\u041f\u043e\u0434 \u043a\u043e\u043d\u0435\u0446 \u043d\u0435\u0434\u0435\u043b\u0438 \u043f\u043e\u0434\u043e\u0441\u043f\u0435\u043b\u0438 PoC \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0438 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043f\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0432 \u0434\u0438\u043a\u043e\u0439 \u043f\u0440\u0438\u0440\u043e\u0434\u0435.\n\n\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e \u043a\u0438\u0431\u0435\u0440\u043f\u043e\u0434\u043f\u043e\u043b\u044c\u0435 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 PoC \u0434\u043b\u044f \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0431\u0445\u043e\u0434\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 Veeam Recovery Orchestrator \u0432\u0435\u0440\u0441\u0438\u0439 7.0.0.337 \u0438 7.1.0.205 \u0438 \u0441\u0442\u0430\u0440\u0448\u0435,\u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u043a\u0430\u043a CVE-2024-29855 \u0441 \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u043e\u043c 9.0 \u043f\u043e CVSS v3.1.\n\n\u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u0434\u043b\u0438\u043d\u043d\u043e\u0441\u0442\u0438, \u0432\u043e\u0439\u0442\u0438 \u0432 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 VRO \u0441 \u043f\u0440\u0430\u0432\u0430\u043c\u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430.\u00a0\n\n\u042d\u043a\u0441\u043f\u043b\u043e\u0439\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u00a0\u0421\u0438\u043d\u0430 \u0425\u0435\u0439\u0440\u043a\u0445\u0430\u0445, \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0432 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0432\u043e\u0434\u0443 \u0443 \u0441\u0435\u0431\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435.\n\n\u0410 \u0432\u043e\u0442 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0430\u044f Qrator Labs \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442, \u0447\u0442\u043e \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043a\u043e\u0434\u043e\u043c PoC \u0434\u043b\u044f DDoS-\u0430\u0442\u0430\u043a\u0438 HTTP/2 Rapid Reset (CVE-2023-44487).\n\n\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c CertiK SkyFall \u0412\u0430\u043d \u0422\u0438\u043b\u0435\u0439 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b PoC \u0434\u043b\u044f CVE-2024-27801, \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 NSXPC \u0432 macOS \u0438 iOS \u043e\u0442 Apple.\n\n\u041e\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0438\u0445 \u0432\u044b\u043f\u0443\u0441\u043a\u0430 \u0434\u0435\u0441\u044f\u0442\u044c \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434. Apple \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u043c\u0430\u0435.\n\nHorizon3 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u0430 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 PoC \u0434\u043b\u044f CVE-2024-29824, \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f SQL \u0432 Ivanti EPM.\n\n\u041f\u043e\u043a\u0430 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043d\u0430\u043f\u0430\u0434\u0435\u043d\u0438\u0439\u00a0\u0432 \u0434\u0438\u043a\u043e\u0439 \u043f\u0440\u0438\u0440\u043e\u0434\u0435 \u043f\u043e\u043a\u0430 \u043d\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u043b\u043e\u0441\u044c, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043a\u0430.\n\n\u0412\u044b\u0448\u043b\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 PoC \u0434\u043b\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0431\u0445\u043e\u0434\u0430 \u043f\u0443\u0442\u0438 \u0431\u0435\u0437 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 (CVE-2024\u20134956) \u0432 Sonatype Nexus. \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u043c\u0430\u0435.", "creation_timestamp": "2024-06-14T14:23:44.000000Z"}, {"uuid": "9ef14cdb-b0a7-4a9f-9446-4703eb2e4a9b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/true_secator/4954", "content": "\u041d\u043e\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 DDoS-\u0430\u0442\u0430\u043a\u0438 HTTP/2 Rapid Reset \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a 0-day \u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0432\u0437\u043e\u0448\u0435\u043b \u0432\u0441\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0440\u0435\u043a\u043e\u0440\u0434\u043d\u044b\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 DDoS. \n\n\u041f\u0440\u0438\u0447\u0435\u043c \u0442\u0440\u0435\u0432\u043e\u0433\u0443 \u0431\u044c\u044e\u0442 \u0442\u0430\u043a\u0438\u0435 \u043c\u0430\u0441\u0442\u043e\u0434\u043e\u043d\u0442\u044b, \u043a\u0430\u043a Amazon Web Services, Cloudflare \u0438 Google, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0438 \u0431\u044b\u043b\u0438 \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d\u044b \u043e\u0442\u0440\u0430\u0436\u0430\u0442\u044c \u0430\u0442\u0430\u043a\u0438 \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435, \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u044e\u0449\u0438\u0435 155, 201 \u0438 \u0440\u0435\u043a\u043e\u0440\u0434\u043d\u044b\u0435 398 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.\n\n\u0410\u0442\u0430\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 HTTP/2 (CVE-2023-44487), \u0437\u043b\u043e\u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u043e\u0442\u043c\u0435\u043d\u044b \u043f\u043e\u0442\u043e\u043a\u0430, \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u0438 \u043e\u0442\u043c\u0435\u043d\u044f\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 DoS.\n\nGoogle \u0441\u043c\u043e\u0433 \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0441 \u0430\u0442\u0430\u043a\u0430\u043c\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0441\u0432\u043e\u0435\u0439 \u0441\u0435\u0442\u0438.\n\n\u041f\u0440\u0438\u0447\u0435\u043c \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 HTTP/2 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0443\u044f\u0437\u0432\u0438\u043c\u044b \u0434\u043b\u044f \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.\n\nCloudflare, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043c\u044f\u0433\u0447\u0438\u043b \u0430\u0442\u0430\u043a\u0443 \u0432 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0441\u0432\u043e\u0435\u0433\u043e \u0430\u043d\u0442\u0438\u0440\u0435\u043a\u043e\u0440\u0434\u0430, \u043e\u0436\u0438\u0434\u0430\u0435\u0442, \u0447\u0442\u043e HTTP/2 Rapid Reset \u0431\u0443\u0434\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0441\u0442\u0438 \u0438 \u0443\u0441\u0438\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u043d\u0435\u043f\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0441\u0432\u043e\u044f\u0442 \u043d\u043e\u0432\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043d\u0430\u0440\u0430\u0441\u0442\u044f\u0442 \u0441\u0432\u043e\u0438 \u0431\u043e\u0442\u043d\u0435\u0442\u044b.\n\nCloudflare \u0443\u0436\u0435 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043b \u043a\u043e\u043b\u043e\u0441\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u043e\u0441\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u0441\u0440\u0435\u0434\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0438 \u0435\u0441\u043b\u0438 \u0432\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0443 502 \u0432\u043c\u0435\u0441\u0442\u043e \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u0441\u0430\u0439\u0442\u0430, \u0442\u043e \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0440\u0443\u043a \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u0432.", "creation_timestamp": "2023-10-11T19:34:48.000000Z"}, {"uuid": "1c61484b-ca08-4c75-865e-9ac8e5bd6edb", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/true_secator/4951", "content": "\u041f\u043e\u0434\u043a\u0430\u0442\u0438\u043b Microsoft October 2023 Patch Tuesday, \u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0438\u043c \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f 104 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0442\u0440\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0435 0-day.\n\n\u0421\u0440\u0435\u0434\u0438 \u043d\u0438\u0445 \u0437\u0430\u043a\u0440\u044b\u0442\u043e 26 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439, 3 - \u043e\u0431\u0445\u043e\u0434\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, 45 - RCE (\u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0442\u043e\u043b\u044c\u043a\u043e 12 \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u044b \u043a\u0430\u043a \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435), 12 - \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, 17 - DoS \u0438 1 - \u0441\u043f\u0443\u0444\u0438\u043d\u0433\u043e\u043c.\n\n\u041f\u043e\u043c\u0438\u043c\u043e 104, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u043e\u0434\u043d\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c Chromium, \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u043a\u0430\u043a CVE-2023-5346, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u043b\u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 3 \u043e\u043a\u0442\u044f\u0431\u0440\u044f \u0438 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0435\u043d\u0430 \u043d\u0430 Microsoft Edge.\n\n\u0418\u0437 \u0442\u0440\u0435\u0445 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0432 \u0434\u0438\u043a\u043e\u0439 \u043f\u0440\u0438\u0440\u043e\u0434\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e \u043d\u0435\u0440\u0430\u0441\u043a\u0440\u044b\u0442\u043e\u0439 \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u043b\u0438\u0448\u044c \u043e\u0434\u043d\u0430.\n\n\u041f\u0435\u0440\u0432\u0430\u044f 0-day, CVE-2023-41763, - \u044d\u0442\u043e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c Skype \u0434\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0430, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0430\u044f \u0441 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439. \u0417\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a, \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0439\u0441\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c\u044e, \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \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, \u043d\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u043d\u0435\u0441\u0442\u0438 \u0432 \u043d\u0435\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.\n\n\u0411\u0430\u0433\u0443 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0424\u043b\u043e\u0440\u0438\u0430\u043d \u0425\u0430\u0443\u0437\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u00a0\u0436\u0435 \u0441\u0430\u043c\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u043d\u0435\u0435 \u0432 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u0435 2022 \u0433\u043e\u0434\u0430 \u043e\u043d \u0443\u0436\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u043b Microsoft, \u0442\u043e\u0433\u0434\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0435\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c. \u0420\u0435\u0441\u0435\u0440\u0447\u0435\u0440 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0442\u0430\u043a\u0436\u0435, \u0447\u0442\u043e \u0435\u0435 \u043c\u043e\u0434\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0432 \u043f\u0435\u0440\u0438\u043c\u0435\u0442\u0440.\n\n\u0414\u0440\u0443\u0433\u0430\u044f CVE-2023-36563\u00a0\u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 Microsoft WordPad \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u0415\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043a\u0440\u0430\u0436\u0438 NTLM-\u0445\u044d\u0448\u0435\u0439 \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438.\n\n\u0427\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c\u044e, \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043e\u0439\u0442\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0435 \u041f\u041e, \u0447\u0442\u043e \u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044e \u043d\u0430\u0434 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439. \u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u0443\u0431\u0435\u0434\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u0439 \u0444\u0430\u0439\u043b.\n\n\u041e\u0448\u0438\u0431\u043a\u0430 \u0431\u044b\u043b\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0430 Microsoft Threat Intelligence \u0438, \u043f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0435\u043c CVE-2023-36761, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u043c\u0435\u0441\u044f\u0446\u0435.\n\n\u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u044b \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 \u043d\u043e\u0432\u043e\u0439 \u0442\u0435\u0445\u043d\u0438\u043a\u0438 DDoS-\u0430\u0442\u0430\u043a\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c CVE-2023-44487 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c HTTP/2 Rapid Reset, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0438 \u0431\u044c\u0435\u0442 \u0432\u0441\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0440\u0435\u043a\u043e\u0440\u0434\u044b \u043f\u043e DDoS.\n\n\u0410\u0442\u0430\u043a\u0430 \u043d\u0430\u0446\u0435\u043b\u0435\u043d\u0430 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0442\u043c\u0435\u043d\u044b \u043f\u043e\u0442\u043e\u043a\u0430 HTTP/2 \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c, \u043a\u0440\u043e\u043c\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438\u043b\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430. Microsoft \u0432\u044b\u0431\u0440\u0430\u043d \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.\n\n\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0431\u044b\u043b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b Cloudflare, Amazon \u0438 Google. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f.\n\n\u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 Microsoft October 2023 Patch Tuesday, \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d\u00a0\u0437\u0434\u0435\u0441\u044c.", "creation_timestamp": "2023-10-11T13:47:32.000000Z"}, {"uuid": "e56efba5-ad4a-4fcb-954e-de297a9b92ec", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/cibsecurity/72761", "content": "\u203c CVE-2023-45802 \u203c\n\nWhen a HTTP/2 stream was reset (RST frame) by a client, there was a time window were the request's memory resources were not reclaimed immediately. Instead, de-allocation was deferred to connection close. A client could send new requests and resets, keeping the connection busy and open and causing the memory footprint to keep on growing. On connection close, all resources were reclaimed, but the process might run out of memory before that.This was found by the reporter during testing of\u00c2\u00a0CVE-2023-44487 (HTTP/2 Rapid Reset Exploit) with their own test client. During \"normal\" HTTP/2 use, the probability to hit this bug is very low. The kept memory would not become noticeable before the connection closes or times out.Users are recommended to upgrade to version 2.4.58, which fixes the issue.\n\n\ud83d\udcd6 Read\n\nvia \"National Vulnerability Database\".", "creation_timestamp": "2023-10-23T12:37:26.000000Z"}, {"uuid": "e937c061-5be8-402e-8dc6-a5995fc9823e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44483", "type": "seen", "source": "https://t.me/ctinow/182485", "content": "https://ift.tt/NzT35pu\nCVE-2023-44483 | Oracle PeopleSoft Enterprise PeopleTools 8.59/8.60/8.61 Security information disclosure", "creation_timestamp": "2024-02-10T09:07:10.000000Z"}, {"uuid": "4ceebc03-e3de-413d-bc83-ce2469fdb92d", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/182507", "content": "https://ift.tt/nThfJup\nCVE-2023-44487 | Oracle Agile PLM 9.3.6 Security denial of service", "creation_timestamp": "2024-02-10T10:11:50.000000Z"}, {"uuid": "4691519f-64e8-469b-8c5f-a2b0572b13b6", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/182505", "content": "https://ift.tt/5BxFi3z\nCVE-2023-44487 | Oracle Siebel CRM Prior to 23.12 EAI /UI denial of service", "creation_timestamp": "2024-02-10T10:11:47.000000Z"}, {"uuid": "0d94470c-d78f-4996-a0c2-61639bd5021d", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/182500", "content": "https://ift.tt/KnMuxdG\nCVE-2023-44487 | Oracle Retail EFTLink 20.0.1/21.0.0/23.0.0 Install denial of service", "creation_timestamp": "2024-02-10T09:41:19.000000Z"}, {"uuid": "e71e50f1-c7fe-47fe-a403-09b3183b4eee", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/181027", "content": "https://ift.tt/42PWznR\nCVE-2023-44487 | Oracle Communications Network Analytics Data Director 23.2.0.0.2/23.3.0.0.0 Third Party denial of service", "creation_timestamp": "2024-02-07T23:16:39.000000Z"}, {"uuid": "0acdbbb1-21a5-441c-b420-63811b96bdaf", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/181012", "content": "https://ift.tt/hbV45Sv\nCVE-2023-44487 | Oracle Communications Network Analytics Data Director 23.2.0.0.2/23.3.0.0.0 Install/Upgrade denial of service", "creation_timestamp": "2024-02-07T22:46:58.000000Z"}, {"uuid": "9d25ac88-488a-4903-9f5e-c6848f99ffed", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/182482", "content": "https://ift.tt/qvKHu9Q\nCVE-2023-44487 | Oracle PeopleSoft Enterprise PeopleTools 8.59/8.60/8.61 Open Search/Elastic Search denial of service", "creation_timestamp": "2024-02-10T09:07:07.000000Z"}, {"uuid": "3a4920d6-9e9a-46b3-ba84-5c17e55f64fb", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/180866", "content": "https://ift.tt/FL3ZnTh\nCVE-2023-44487 | Oracle Communications Cloud Native Core Network Repository Function Install/Upgrade denial of service", "creation_timestamp": "2024-02-07T18:12:07.000000Z"}, {"uuid": "059727ac-4173-49d5-9b9a-3fe78a30f632", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/180592", "content": "https://ift.tt/o7dctMn\nCVE-2023-44487 | Oracle Communications Messaging Server 8.1.0.24.0 Security denial of service", "creation_timestamp": "2024-02-07T09:37:02.000000Z"}, {"uuid": "20e62728-d8f9-4410-bafd-319aea961435", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/180590", "content": "https://ift.tt/flMyRzj\nCVE-2023-44487 | Oracle Communications Convergent Charging Controller 12.0.6.0.0/15.0.0.0.0 Common Functions denial of service", "creation_timestamp": "2024-02-07T09:37:00.000000Z"}, {"uuid": "9953c906-f4aa-4d8c-a58d-dd971284f923", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/180611", "content": "https://ift.tt/6JX7Upk\nCVE-2023-44487 | Oracle Communications Service Catalog and Design 7.4.0.7.0/7.4.1.5.0/7.4.2.8.0 PSR Designer denial of service", "creation_timestamp": "2024-02-07T10:36:05.000000Z"}, {"uuid": "524fd3eb-62d5-4bf6-ac38-dc6321c02a63", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44483", "type": "seen", "source": "https://t.me/ctinow/181071", "content": "https://ift.tt/0apZE8e\nCVE-2023-44483 | Oracle Communications Cloud Native Core Console 23.3.1 Configuration information disclosure", "creation_timestamp": "2024-02-08T01:26:06.000000Z"}, {"uuid": "03708f38-35fc-4a71-9c5c-f0936908d456", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/180996", "content": "https://ift.tt/0d8Fi2J\nCVE-2023-44487 | Oracle Communications Network Analytics Data Director 23.2.0.0.2/23.3.0.0.0 General denial of service", "creation_timestamp": "2024-02-07T22:22:03.000000Z"}, {"uuid": "b95411a6-3891-48a7-8e8b-8de19642d3b0", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/180950", "content": "https://ift.tt/e7KtSY3\nCVE-2023-44487 | Oracle Communications Cloud Native Core Unified Data Repository Signaling denial of service", "creation_timestamp": "2024-02-07T20:46:46.000000Z"}, {"uuid": "e37a6013-f575-4520-9853-7d1a5e36428c", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/180949", "content": "https://ift.tt/GMYTdj1\nCVE-2023-44487 | Oracle Communications Cloud Native Core Unified Data Repository Signaling denial of service", "creation_timestamp": "2024-02-07T20:46:45.000000Z"}, {"uuid": "2402ce1f-2f42-4805-89fa-123cf6bd5729", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/180937", "content": "https://ift.tt/kybjTBe\nCVE-2023-44487 | Oracle Communications Cloud Native Core Unified Data Repository Signaling denial of service", "creation_timestamp": "2024-02-07T20:16:20.000000Z"}, {"uuid": "ce09d0ab-53ce-42af-b40f-6f0ced18525a", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/180928", "content": "https://ift.tt/ln0UfXB\nCVE-2023-44487 | Oracle Communications Cloud Native Core Security Edge Protection Proxy Signaling denial of service", "creation_timestamp": "2024-02-07T19:46:29.000000Z"}, {"uuid": "0356f86f-8337-4d39-b26f-6b662d16c6ab", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/180905", "content": "https://ift.tt/Op3gNPZ\nCVE-2023-44487 | Oracle Communications Cloud Native Core Network Slice Selection Function Install/Upgrade denial of service", "creation_timestamp": "2024-02-07T19:16:39.000000Z"}, {"uuid": "1086b715-9ee2-4673-a47e-b3e4b68eb982", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/180904", "content": "https://ift.tt/bx67J2v\nCVE-2023-44487 | Oracle Communications Cloud Native Core Network Slice Selection Function Install/Upgrade denial of service", "creation_timestamp": "2024-02-07T19:16:38.000000Z"}, {"uuid": "a4b8c242-eecd-44c1-81e2-af768a05d612", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/180900", "content": "https://ift.tt/oDOMV6b\nCVE-2023-44487 | Oracle Communications Cloud Native Core Network Repository Function Install/Upgrade denial of service", "creation_timestamp": "2024-02-07T18:46:58.000000Z"}, {"uuid": "8efc2d00-e78a-4fec-821b-b13f2569efec", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/180612", "content": "https://ift.tt/3yP4TG5\nCVE-2023-44487 | Oracle Communications Service Catalog and Design 7.4.0.7.0/7.4.1.5.0/7.4.2.8.0 PSR Designer denial of service", "creation_timestamp": "2024-02-07T10:36:06.000000Z"}, {"uuid": "fefbd1c1-a3e4-42c1-a46b-fb0d2673b345", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44483", "type": "seen", "source": "https://t.me/ctinow/180677", "content": "https://ift.tt/mxNW3hS\nCVE-2023-44483 | Oracle Communications Service Catalog and Design 7.4.2.8.0 PSR Designer information disclosure", "creation_timestamp": "2024-02-07T12:41:09.000000Z"}, {"uuid": "4d66f369-4781-4bff-9ac6-fa88f85976f7", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/180601", "content": "https://ift.tt/3gCWPS4\nCVE-2023-44487 | Oracle Communications Network Charging and Control 12.0.6.0.0/15.0.0.0.0 Common Functions denial of service", "creation_timestamp": "2024-02-07T10:06:44.000000Z"}, {"uuid": "6b1865be-58ad-4dc6-8c2b-5ba098cffe19", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/180604", "content": "https://ift.tt/qSTR35Y\nCVE-2023-44487 | Oracle Communications Pricing Design Center up to 12.0.0.8.0/15.0.0.0.0 REST Services Manager denial of service", "creation_timestamp": "2024-02-07T10:06:47.000000Z"}, {"uuid": "d8eaafc5-3608-4dd7-8da6-57e3c6429444", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/180421", "content": "https://ift.tt/T6YSsq3\nCVE-2023-44487 | Oracle Commerce Guided Search 11.3.2 Workbench denial of service", "creation_timestamp": "2024-02-06T23:51:55.000000Z"}, {"uuid": "717248da-71af-4350-a28a-68cae74043f6", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44483", "type": "seen", "source": "https://t.me/ctinow/181899", "content": "https://ift.tt/C5m9QOH\nCVE-2023-44483 | Oracle WebCenter Portal 12.2.1.4.0 Discussion Forums information disclosure", "creation_timestamp": "2024-02-09T09:16:21.000000Z"}, {"uuid": "dad6ed4e-baa8-4d68-9bf7-bff5939b07a9", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44483", "type": "seen", "source": "https://t.me/ctinow/181914", "content": "https://ift.tt/dz8sbhm\nCVE-2023-44483 | Oracle WebLogic Server 12.2.1.4.0/14.1.1.0.0 Centralized Thirdparty Jars information disclosure", "creation_timestamp": "2024-02-09T09:56:13.000000Z"}, {"uuid": "3d080066-833c-4290-91ee-2cf043caa104", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/181856", "content": "https://ift.tt/zgbHkZO\nCVE-2023-44487 | Oracle Managed File Transfer 12.2.1.4.0 Runtime Server denial of service", "creation_timestamp": "2024-02-09T08:21:44.000000Z"}, {"uuid": "191c7388-5fef-4c90-916f-83877faa0547", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/181854", "content": "https://ift.tt/3VJD2Rl\nCVE-2023-44487 | Oracle Coherence 12.2.1.4.0/14.1.1.0.0 Third Party denial of service", "creation_timestamp": "2024-02-09T08:21:42.000000Z"}, {"uuid": "782868d8-14d1-4477-835b-2bab3d875559", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/182067", "content": "https://ift.tt/gRroveA\nCVE-2023-44487 | Oracle GraalVM for JDK Oracle GraalVM for JDK 21.0.1 Node denial of service", "creation_timestamp": "2024-02-09T15:26:56.000000Z"}, {"uuid": "5d333a4c-0f21-436c-b511-d74d59980251", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ctinow/181836", "content": "https://ift.tt/9T8OmJH\nCVE-2023-44487 | Oracle Coherence 12.2.1.4.0/14.1.1.0.0 Third Party denial of service", "creation_timestamp": "2024-02-09T07:51:31.000000Z"}, {"uuid": "d77a216a-a405-4695-9094-9d8644db8239", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44483", "type": "seen", "source": "https://t.me/ctinow/181587", "content": "https://ift.tt/xAlHDsw\nCVE-2023-44483 | Oracle Financial Services Behavior Detection Platform 8.0.8.1/8.1.1.1/8.1.2.5/8.1.2.6 Application information disclosure", "creation_timestamp": "2024-02-08T19:41:47.000000Z"}, {"uuid": "35de5fac-4287-42fd-bab7-bad4134147be", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44483", "type": "seen", "source": "https://t.me/ctinow/181606", "content": "https://ift.tt/T4OaryG\nCVE-2023-44483 | Oracle Financial Services Trade-Based Anti Money Laundering Enterprise Edition Platform information disclosure", "creation_timestamp": "2024-02-08T20:11:15.000000Z"}, {"uuid": "c0a40d32-aad2-4ce2-b08b-2e4515ab3b81", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44483", "type": "seen", "source": "https://t.me/ctinow/181552", "content": "https://ift.tt/MAiGzFg\nCVE-2023-44483 | Oracle Financial Services Analytical Applications Infrastructure information disclosure", "creation_timestamp": "2024-02-08T19:12:05.000000Z"}, {"uuid": "3e8f7958-dd34-4307-a45a-8ff0fdb9b9e6", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/cibsecurity/71988", "content": "\ud83d\udd74 Internet-Wide Zero-Day Bug Fuels Largest-Ever DDoS Event \ud83d\udd74\n\nOngoing Rapid Reset DDoS flood attacks exposed organizations need to patch CVE-2023-44487 immediately to head off crippling outages and business disruption.\n\n\ud83d\udcd6 Read\n\nvia \"Dark Reading\".", "creation_timestamp": "2023-10-10T21:52:06.000000Z"}, {"uuid": "9efc99d2-72b3-45d3-beda-36d735f82759", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44481", "type": "seen", "source": "https://t.me/ctinow/160681", "content": "https://ift.tt/vsViPeY\nCVE-2023-44481 Exploit", "creation_timestamp": "2023-12-29T21:17:11.000000Z"}, {"uuid": "c255ce4f-f788-4a5f-9b86-7981286443da", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44482", "type": "seen", "source": "https://t.me/ctinow/160657", "content": "https://ift.tt/OedK3Jk\nCVE-2023-44482 Exploit", "creation_timestamp": "2023-12-29T19:16:51.000000Z"}, {"uuid": "56cd50a8-7d8d-4218-90c0-10088707f443", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44482", "type": "seen", "source": "https://t.me/ctinow/157933", "content": "https://ift.tt/ExyiUv8\nCVE-2023-44482", "creation_timestamp": "2023-12-21T20:22:28.000000Z"}, {"uuid": "22d39dcb-f850-496c-8bd6-94cd90fdc511", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44481", "type": "seen", "source": "https://t.me/ctinow/157932", "content": "https://ift.tt/cE3vli8\nCVE-2023-44481", "creation_timestamp": "2023-12-21T20:22:27.000000Z"}, {"uuid": "b06c5733-e49c-4027-9ff2-22b5e32bbb4f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "https://t.me/cibsecurity/71948", "content": "\u203c CVE-2023-44487 \u203c\n\nThe HTTP/2 protocol allows a denial of service (server resource consumption) because request cancellation can reset many streams quickly, as exploited in the wild in August through October 2023.\n\n\ud83d\udcd6 Read\n\nvia \"National Vulnerability Database\".", "creation_timestamp": "2023-10-10T18:16:48.000000Z"}, {"uuid": "5d6fd16a-845a-4360-b427-01ffa086d24b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/HackerOne/3592", "content": "HTTP/2 Rapid Reset Attack ( cve-2023-44487 )\n\nConcept of the attack in code:\nHttps://github.com/nxenon/cve-2023-44487\n\n\n#dos #ddos #http2 #cve_2023_44487", "creation_timestamp": "2023-11-11T19:33:13.000000Z"}, {"uuid": "974b2a25-a356-486d-b49f-fabc5cff4fe0", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "https://t.me/thehackernews/3990", "content": "\u26a1 Beware of the HTTP/2 Rapid Reset attack! \n \nA novel zero-day flaw is being exploited to launch record-breaking distributed DDoS attacks. \n \nFind out more here: https://thehackernews.com/2023/10/http2-rapid-reset-zero-day.html \n \nLearn how AWS, Cloudflare, and Google are addressing CVE-2023-44487.", "creation_timestamp": "2023-10-10T17:26:45.000000Z"}, {"uuid": "2c274e6b-7706-43b2-9bc1-04fdf3857cea", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "https://t.me/SecLabNews/14399", "content": "Rapid Reset: \u043d\u043e\u0432\u0430\u044f \u0443\u0433\u0440\u043e\u0437\u0430 \u0434\u043b\u044f HTTP/2, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u0442\u043c\u0435\u043d\u0443 \u043f\u043e\u0442\u043e\u043a\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u043e\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430\n\n\u2796 AWS, Cloudflare \u0438 Google \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u0438 \u043e \u0441\u043c\u044f\u0433\u0447\u0435\u043d\u0438\u0438 \u0430\u0442\u0430\u043a Rapid Reset, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u043b\u0438 \u0434\u043e 398 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443.\n\n\u2796 \u0410\u0442\u0430\u043a\u0438 Rapid Reset \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044e\u0442 zero-day \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CVE-2023-44487 \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 HTTP/2, \u0437\u043b\u043e\u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u043e\u0442\u043c\u0435\u043d\u044b \u043f\u043e\u0442\u043e\u043a\u0430.\n\n\u2796 \u0414\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 \u0430\u0442\u0430\u043a Rapid Reset \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 HTTP-\u0430\u0442\u0430\u043a \u0438 \u0443\u0441\u0438\u043b\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u043a DDoS \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438.\n\n#DDoS #HTTP2 #RapidReset @SecLabNews", "creation_timestamp": "2023-10-11T07:34:31.000000Z"}, {"uuid": "d77766d0-2882-44f0-aa85-160715c44e6d", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "https://t.me/GhostClanInt/24479", "content": "DDoS methods\n\n1. Find the target domain example.com\n\n2. Try ping to see the IP: ping domain.com\n\n3. Copy the IP address and search near iplocation.net\n\n4. Look at the IP location that points to the correct country or not.\n\n5. If the IP points to the right country, most likely the server is there and can continue the DoS attack with Hping3, LOIC, RUDY and others.\n\n6. If the IP points to a cloud such as google, aws, akamai or waf such as cloudflare, imperva and others, then it cannot be DDoS because it is not the correct IP.\n\n7. To get the correct IP, you can see his DNS records at intodns.com/  . Scroll to look at SOA, MX and CNAME records.\n\n8. Try searching each IP at iplocation.net to see if it points to the correct country or not.\n\n9. Then if it is correct, repeat step 5 earlier. If there is no IP that points to the correct server or country, then look for another target.\n\nGood luck.\n\nViva Operation Israel Hackers!\n\n#Oplsrael - #FreePalestine - #AntiZionism - #Fucklsrael - #Anonymous\n\nhttps://github.com/sp00fing/ddos/blob/main/Layer-7/XML-RPC-Pingback-C/xml\n\nhttps://github.com/MatrixTM/MHDDoS\n\nhttps://ufonet.03c8.net/\n\nhttps://github.com/R00tS3c/DDOS-RootSec\n\nhttps://github.com/LimerBoy/Impulse\n\nlatest 0day for Ddos \n\nCVE-2023-44487\n\nGHOSTS of Palestine \ud83c\uddf5\ud83c\uddf8", "creation_timestamp": "2024-02-08T13:15:25.000000Z"}, {"uuid": "9487f7b1-95ff-4212-ba9a-92a3d3a598c2", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "https://t.me/S_E_Reborn/4142", "content": "\u041d\u043e\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 DDoS-\u0430\u0442\u0430\u043a\u0438 HTTP/2 Rapid Reset \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a 0-day \u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0432\u0437\u043e\u0448\u0435\u043b \u0432\u0441\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0440\u0435\u043a\u043e\u0440\u0434\u043d\u044b\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 DDoS. \n\n\u041f\u0440\u0438\u0447\u0435\u043c \u0442\u0440\u0435\u0432\u043e\u0433\u0443 \u0431\u044c\u044e\u0442 \u0442\u0430\u043a\u0438\u0435 \u043c\u0430\u0441\u0442\u043e\u0434\u043e\u043d\u0442\u044b, \u043a\u0430\u043a Amazon Web Services, Cloudflare \u0438 Google, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0438 \u0431\u044b\u043b\u0438 \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d\u044b \u043e\u0442\u0440\u0430\u0436\u0430\u0442\u044c \u0430\u0442\u0430\u043a\u0438 \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435, \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u044e\u0449\u0438\u0435 155, 201 \u0438 \u0440\u0435\u043a\u043e\u0440\u0434\u043d\u044b\u0435 398 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.\n\n\u0410\u0442\u0430\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 HTTP/2 (CVE-2023-44487), \u0437\u043b\u043e\u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u043e\u0442\u043c\u0435\u043d\u044b \u043f\u043e\u0442\u043e\u043a\u0430, \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u0438 \u043e\u0442\u043c\u0435\u043d\u044f\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 DoS.\n\nGoogle \u0441\u043c\u043e\u0433 \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0441 \u0430\u0442\u0430\u043a\u0430\u043c\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0441\u0432\u043e\u0435\u0439 \u0441\u0435\u0442\u0438.\n\n\u041f\u0440\u0438\u0447\u0435\u043c \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 HTTP/2 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0443\u044f\u0437\u0432\u0438\u043c\u044b \u0434\u043b\u044f \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.\n\nCloudflare, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043c\u044f\u0433\u0447\u0438\u043b \u0430\u0442\u0430\u043a\u0443 \u0432 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0441\u0432\u043e\u0435\u0433\u043e \u0430\u043d\u0442\u0438\u0440\u0435\u043a\u043e\u0440\u0434\u0430, \u043e\u0436\u0438\u0434\u0430\u0435\u0442, \u0447\u0442\u043e HTTP/2 Rapid Reset \u0431\u0443\u0434\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0441\u0442\u0438 \u0438 \u0443\u0441\u0438\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u043d\u0435\u043f\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0441\u0432\u043e\u044f\u0442 \u043d\u043e\u0432\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043d\u0430\u0440\u0430\u0441\u0442\u044f\u0442 \u0441\u0432\u043e\u0438 \u0431\u043e\u0442\u043d\u0435\u0442\u044b.\n\nCloudflare \u0443\u0436\u0435 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043b \u043a\u043e\u043b\u043e\u0441\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u043e\u0441\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u0441\u0440\u0435\u0434\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0438 \u0435\u0441\u043b\u0438 \u0432\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0443 502 \u0432\u043c\u0435\u0441\u0442\u043e \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u0441\u0430\u0439\u0442\u0430, \u0442\u043e \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0440\u0443\u043a \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u0432.", "creation_timestamp": "2023-10-11T19:35:56.000000Z"}, {"uuid": "884af9ce-4966-4303-ab10-e6fbcedc845f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/CyberSecurityTechnologies/9183", "content": "#tools\n#Blue_Team_Techniques\n1. Basic vulnerability scanning to see if web servers may be vulnerable to CVE-2023-44487\nhttps://github.com/bcdannyboy/CVE-2023-44487\n2. An Algorithm to Detect Hosting Providers/IP Ranges\nhttps://ipapi.is/blog/detecting-hosting-providers.html\n3. Tool for MSSQL relay audit and abuse\nhttps://github.com/CompassSecurity/mssqlrelay\n]-&gt; https://blog.compass-security.com/2023/10/relaying-ntlm-to-mssql", "creation_timestamp": "2023-10-12T11:00:38.000000Z"}, {"uuid": "9950f4cd-810b-4c2f-ae68-98cf72b59cf7", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/CyberSecurityTechnologies/9181", "content": "#Threat_Research\n1. A Risk-Based Prioritization Taxonomy for prioritizing CVEs\nhttps://github.com/theparanoids/PrioritizedRiskRemediation\n2. HTTP/2 \"Rapid Reset\" DDoS attack (CVE-2023-44487)\nhttps://cloud.google.com/blog/products/identity-security/how-it-works-the-novel-http2-rapid-reset-ddos-attack\n]-&gt; https://www.cisa.gov/news-events/alerts/2023/10/10/http2-rapid-reset-vulnerability-cve-2023-44487", "creation_timestamp": "2023-10-12T11:00:38.000000Z"}, {"uuid": "29f3ef6c-aa57-40d6-8a48-819efed68b4c", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/CyberSecurityTechnologies/11806", "content": "#exploit\n1. CVE-2025-0108:\nNginx/Apache Path Confusion to Auth Bypass in PAN-OS\nhttps://slcyber.io/blog/nginx-apache-path-confusion-to-auth-bypass-in-pan-os\n\n2. CVE-2024-42009:\nStored XSS in Roundcube Webmail\nhttps://github.com/0xbassiouny1337/CVE-2024-42009\n\n3. CVE-2022-41741, CVE-2022-41742, CVE-2023-44487 Check Script:\nhttps://github.com/moften/CVE-2022-4174_CVE-2022-41742", "creation_timestamp": "2025-02-13T14:50:07.000000Z"}, {"uuid": "66c85130-39c6-4d49-ba39-ea7e3165e4be", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/SaturnSpark/3441", "content": "NEWS:\n+NEW METHOD \n-RAPIDRST\nBYPASS HTTPDDOS\n_\n+exploits:\nCVE-2016-6581, \nCVE-2019-9512, CVE-2023-44487\n__\nbest regards \n@strstring", "creation_timestamp": "2024-02-26T16:31:09.000000Z"}, {"uuid": "a04e650a-5f3a-4552-ae4a-66b17970fe9a", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/Rootsec_2/1333", "content": "#Threat_Research\n1. A Risk-Based Prioritization Taxonomy for prioritizing CVEs\nhttps://github.com/theparanoids/PrioritizedRiskRemediation\n2. HTTP/2 \"Rapid Reset\" DDoS attack (CVE-2023-44487)\nhttps://cloud.google.com/blog/products/identity-security/how-it-works-the-novel-http2-rapid-reset-ddos-attack\n]-&gt; https://www.cisa.gov/news-events/alerts/2023/10/10/http2-rapid-reset-vulnerability-cve-2023-44487", "creation_timestamp": "2024-08-16T08:33:54.000000Z"}, {"uuid": "a37763d9-18c1-4946-b075-2afab51d4d0e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/Rootsec_2/1335", "content": "#tools\n#Blue_Team_Techniques\n1. Basic vulnerability scanning to see if web servers may be vulnerable to CVE-2023-44487\nhttps://github.com/bcdannyboy/CVE-2023-44487\n2. An Algorithm to Detect Hosting Providers/IP Ranges\nhttps://ipapi.is/blog/detecting-hosting-providers.html\n3. Tool for MSSQL relay audit and abuse\nhttps://github.com/CompassSecurity/mssqlrelay\n]-&gt; https://blog.compass-security.com/2023/10/relaying-ntlm-to-mssql", "creation_timestamp": "2024-08-16T08:33:54.000000Z"}, {"uuid": "7d438f11-9f8a-4bdd-9bae-288741b72e3d", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/Rootsec_2/1360", "content": "https://github.com/imabee101/CVE-2023-44487\n\nPERFORM ATTACKS AT YOUR OWN RISK, THIS IS JUST A INFORMATIONAL, I AM NOT RESPONSIBLE FOR ILLEGAL ACTIVITY", "creation_timestamp": "2024-08-16T08:33:56.000000Z"}, {"uuid": "89961d3b-97e7-4e45-a9cc-bd1d3149ed5d", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/kasraone_com/558", "content": "\u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u062a\u06a9\u0646\u06cc\u06a9 \u0647\u0627\u06cc \u062a\u06cc\u0645 \u0622\u0628\u06cc \ud83d\udc99\n\nGit Hub \ud83d\udc08\n\n1. \u0627\u0633\u06a9\u0646 \u0622\u0633\u06cc\u0628 \u067e\u0630\u06cc\u0631\u06cc \u0627\u0633\u0627\u0633\u06cc \u0628\u0631\u0627\u06cc \u062f\u06cc\u062f\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u0622\u06cc\u0627 \u0633\u0631\u0648\u0631\u0647\u0627\u06cc \u0648\u0628 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u062f\u0631 \u0628\u0631\u0627\u0628\u0631 CVE-2023-44487 \u0622\u0633\u06cc\u0628 \u067e\u0630\u06cc\u0631 \u0628\u0627\u0634\u0646\u062f\nhttps://github.com/bcdannyboy/CVE-2023-44487\n\n2. \u06cc\u06a9 \u0627\u0644\u06af\u0648\u0631\u06cc\u062a\u0645 \u0628\u0631\u0627\u06cc \u062a\u0634\u062e\u06cc\u0635 \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc / \u0645\u062d\u062f\u0648\u062f\u0647 \u0647\u0627\u06cc IP\nhttps://ipapi.is/blog/detectin-hosting-providers.html\n\n3. \u0627\u0628\u0632\u0627\u0631 \u062d\u0633\u0627\u0628\u0631\u0633\u06cc \u0648 \u0633\u0648\u0621 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0631\u0644\u0647 MSSQL\n\nhttps://github.com/CompassSecurity/mssqlrelay\nhttps://blog.compass-security.com/2023/10/relaying-ntlm-to-mssql\n\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u2661 \u2800\u2800 \u3007\u2800\u00a0 \u2800 \u2399\u2800\u200c \u200c \u2332\u2063 \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u02e1\u2071\u1d4f\u1d49\u00a0 \u1d9c\u1d52\u1d50\u1d50\u1d49\u207f\u1d57\u00a0 \u02e2\u1d43\u1d5b\u1d49\u00a0 \u02e2\u02b0\u1d43\u02b3\u1d49\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 K1\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 kasraone", "creation_timestamp": "2023-10-17T07:21:58.000000Z"}, {"uuid": "0021d796-5f6d-4036-afaa-6f1565f865d5", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "Telegram/bDRsekGT6KsUOKSAQI-KSXDhypQzzgL-gjqbTcCXe2h_h6A", "content": "", "creation_timestamp": "2026-05-15T21:00:05.000000Z"}, {"uuid": "74181123-96eb-4cfb-b823-36bace3b3102", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://gist.github.com/ishideo/2ef9371157b4cfc12ab0e8d4afc0847b", "content": "# Introduction\n\nThis Gist aims to centralise the most relevant public sources of information related to the [HTTP/2](https://datatracker.ietf.org/doc/html/rfc7540) Rapid Reset vulnerability. This vulnerability has been disclosed jointly by Google, Amazon AWS, and Cloudflare on 10 October 2023 at 12:00 UTC.\n\nPlease help us make this page as comprehensive as possible by contributing relevant references, vendor advisories and statements, mitigations, etc.\n\n# References\n\n- [CVE-2023-44487](https://cvepremium.circl.lu/cve/CVE-2023-44487), CIRCL CVE Search\n- [How AWS protects customers from DDoS events](https://aws.amazon.com/blogs/security/how-aws-protects-customers-from-ddos-events/), AWS\n- [How it works: The novel HTTP/2 \u2018Rapid Reset\u2019 DDoS attack](https://cloud.google.com/blog/products/identity-security/how-it-works-the-novel-http2-rapid-reset-ddos-attack), Google\n- [HTTP/2 Rapid Reset: deconstructing the record-breaking attack](https://blog.cloudflare.com/technical-breakdown-http2-rapid-reset-ddos-attack/), Cloudflare\n- [Microsoft Response to Distributed Denial of Service (DDoS) Attacks against HTTP/2](https://msrc.microsoft.com/blog/2023/10/microsoft-response-to-distributed-denial-of-service-ddos-attacks-against-http/2/), Microsoft \n- Potential mention of a [similar issue in 2018 concerning HAproxy](https://www.mail-archive.com/haproxy@formilux.org/msg44134.html)\n- [RFC7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)](https://datatracker.ietf.org/doc/html/rfc7540)\n- [Security Advisory 2023-074 HTTP/2 Rapid Reset DDoS Vulnerability](https://www.cert.europa.eu/static/SecurityAdvisories/2023/CERT-EU-SA2023-074.pdf), CERT-EU\n- [HTTP/2 Rapid Reset Vulnerability, CVE-2023-44487](https://www.cisa.gov/news-events/alerts/2023/10/10/http2-rapid-reset-vulnerability-cve-2023-44487), CISA\n- [Using HTTP/3 Stream Limits in HTTP/2](https://martinthomson.github.io/h2-stream-limits/draft-thomson-httpbis-h2-stream-limits.html) - IETF draft to backport the HTTP/3 steam limits in HTTP/2\n\n# Vendor advisories and statements\n\n- [Apache Tomcat](https://github.com/apache/tomcat/commit/9cdfe25bad707f34b3e5da2994f3f1952a163c3e) - Fixed in 8.5.94\n- [AWS](https://aws.amazon.com/security/security-bulletins/AWS-2023-011/)\n- [F5](https://www.f5.com/company/blog/http-2-rapid-reset-attack-impacting-f5-nginx-products)\n- [Golang](https://groups.google.com/g/golang-announce/c/iNNxDTCjZvo)\n- [HAPROXY](https://www.haproxy.com/blog/haproxy-is-not-affected-by-the-http-2-rapid-reset-attack-cve-2023-44487) - HAProxy is not affected by the HTTP/2 Rapid Reset Attack\n- [Kong](https://konghq.com/blog/product-releases/novel-http2-rapid-reset-ddos-vulnerability-update)\n- [Microsoft IIS](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-44487)\n- [Microsoft MsQuic](https://github.com/microsoft/msquic/releases/tag/v2.2.3) - Fixed in 2.2.3\n- [Netscaler](https://www.netscaler.com/blog/news/how-to-mitigate-the-http-2-rapid-reset-vulnerability-on-netscaler/)\n- [Nginx](https://www.nginx.com/blog/http-2-rapid-reset-attack-impacting-f5-nginx-products/)\n- [nghttp2 library](https://github.com/nghttp2/nghttp2/security/advisories/GHSA-vx74-f528-fxqg) - Fixed in 1.57.0\n\n# Testing if HTTP/2 is enabled\n\n## OpenSSL\n\n~~~shell\necho 1 | openssl s_client -alpn h2 -connect google.com:443 -status 2&gt;&amp;1  | grep \"ALPN\"\n~~~\n\n## Nmap\n\n~~~shell\nnmap -p 443 --script=tls-nextprotoneg www.google.com\n~~~\n\n## curl\n\n~~~shell\ncurl -Is --http2-prior-knowledge https://example.com/| head -1\n~~~\n# Testing if it's vulnerable (use at your own risk)\n\n- [Basic vulnerability scanning tool to see if web servers may be vulnerable to CVE-2023-44487](https://github.com/bcdannyboy/CVE-2023-44487)\n- [Rapid Reset Client is a tool for testing mitigations and exposure to CVE-2023-44487 (Rapid Reset DDoS attack vector)](https://github.com/secengjeff/rapidresetclient)\n\n# Potential remediation\n\n### NGINX \n\n## can be configured to mitigate the vulnerability\n\n- Disabling HTTP/2 in NGINX is not necessary. Simply ensure you have configured:\n\n  -  `keepalive_requests` should be kept at the default setting of 1000 requests\n  -  `http2_max_concurrent_streams` should be kept at the default setting of 128 streams\n  -  `limit_conn` and `limit_req` should be set \"with a reasonable setting balancing application performance and security\"\n\n## If you want to remove `http2` support\n\n- Remove reference to `http2` in the listening part\n\n### DDoS protection / CDNs\n\nWeb apps that are behind the following DDoS protection providers / CDNs should not be impacted:\n\n- AWS\n- Cloudflare\n- Google Cloud\n- Microsoft Azure\n", "creation_timestamp": "2026-06-09T03:35:55.000000Z"}, {"uuid": "c80a318d-b09e-4320-9c84-00832f4bcb53", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "Telegram/LhIaoh3_gVTYhhCtIaB2hHXuGQagt5GRqp2XlP3YfDwVpSU", "content": "", "creation_timestamp": "2026-06-06T21:00:04.000000Z"}, {"uuid": "35709a42-e081-4c92-abf1-e253ec9d0d98", "vulnerability_lookup_origin": "caeb2787-0d58-4236-9039-7c86c3e566f3", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "https://vulnerability.circl.lu/known-exploited-vulnerabilities-catalog/26e0bfc9-446c-4f52-a404-d51d9317cf0e", "content": "", "creation_timestamp": "2026-06-19T12:46:47.337533Z"}, {"uuid": "3002c849-296b-4e21-bbd1-83603580f155", "vulnerability_lookup_origin": "caeb2787-0d58-4236-9039-7c86c3e566f3", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "https://vulnerability.circl.lu/known-exploited-vulnerabilities-catalog/0cbf9a82-2675-4ede-b44b-4bd004a74aa9", "content": "", "creation_timestamp": "2026-06-23T14:05:46.590267Z"}, {"uuid": "067a52f9-0af6-4b7c-bd2a-381b669f860f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ZerodayAlert/254", "content": "\u0417\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044e\u0442 Rapid Reset \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u0437 \u0441\u0442\u0440\u043e\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432\n\n\ud83d\ude35\u200d\ud83d\udcab \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CVE-2023-44487 (Rapid Reset) \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 HTTP/2 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u043c\u043e\u0449\u043d\u044b\u0435 DDoS-\u0430\u0442\u0430\u043a\u0438 \u0442\u0438\u043f\u0430 \u00ab\u043e\u0442\u043a\u0430\u0437 \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438\u00bb. \u041a\u0438\u0431\u0435\u0440\u043f\u0440\u0435\u0441\u0442\u0443\u043f\u043d\u0438\u043a\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0435\u0435 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044e\u0442.\n\n\ud83d\udca5 \u0410\u0442\u0430\u043a\u0438 Rapid Reset \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u043d\u043e HTTP/2-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0438 \u043e\u0442\u043c\u0435\u043d\u044b \u0438\u0445 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435\u043c. \u0421\u0435\u0440\u0432\u0435\u0440 \u0442\u0440\u0430\u0442\u0438\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0435.\n\n\u2601\ufe0f \u041a\u0440\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a Google, AWS \u0438 Cloudflare, \u0443\u0436\u0435 \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u043b\u0438 \u043e\u0442 \u043c\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 DDoS \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Rapid Reset, \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0432\u0448\u0438\u0445 \u0441\u043e\u0442\u0435\u043d \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443.\n\n#\u0443\u0433\u0440\u043e\u0437\u0430 #\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 #\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c #\u0434\u0430\u043d\u043d\u044b\u0435\u0432\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \n\n@ZerodayAlert", "creation_timestamp": "2026-07-06T11:00:05.929496Z"}, {"uuid": "1f3c0673-c76c-46a3-bdc2-7e1d8737dee5", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/ZerodayAlert/254", "content": "\u0417\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044e\u0442 Rapid Reset \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u0437 \u0441\u0442\u0440\u043e\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432\n\n\ud83d\ude35\u200d\ud83d\udcab \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CVE-2023-44487 (Rapid Reset) \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 HTTP/2 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u043c\u043e\u0449\u043d\u044b\u0435 DDoS-\u0430\u0442\u0430\u043a\u0438 \u0442\u0438\u043f\u0430 \u00ab\u043e\u0442\u043a\u0430\u0437 \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438\u00bb. \u041a\u0438\u0431\u0435\u0440\u043f\u0440\u0435\u0441\u0442\u0443\u043f\u043d\u0438\u043a\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0435\u0435 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044e\u0442.\n\n\ud83d\udca5 \u0410\u0442\u0430\u043a\u0438 Rapid Reset \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u043d\u043e HTTP/2-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0438 \u043e\u0442\u043c\u0435\u043d\u044b \u0438\u0445 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435\u043c. \u0421\u0435\u0440\u0432\u0435\u0440 \u0442\u0440\u0430\u0442\u0438\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0435.\n\n\u2601\ufe0f \u041a\u0440\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a Google, AWS \u0438 Cloudflare, \u0443\u0436\u0435 \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u043b\u0438 \u043e\u0442 \u043c\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 DDoS \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Rapid Reset, \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0432\u0448\u0438\u0445 \u0441\u043e\u0442\u0435\u043d \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443.\n\n#\u0443\u0433\u0440\u043e\u0437\u0430 #\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 #\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c #\u0434\u0430\u043d\u043d\u044b\u0435\u0432\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \n\n@ZerodayAlert", "creation_timestamp": "2026-07-07T00:00:10.864171Z"}, {"uuid": "9ac84f1b-e059-471b-9ff8-98fa78427bde", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "https://t.me/ZerodayAlert/254", "content": "\u0417\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044e\u0442 Rapid Reset \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u0437 \u0441\u0442\u0440\u043e\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432\n\n\ud83d\ude35\u200d\ud83d\udcab \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CVE-2023-44487 (Rapid Reset) \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 HTTP/2 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u043c\u043e\u0449\u043d\u044b\u0435 DDoS-\u0430\u0442\u0430\u043a\u0438 \u0442\u0438\u043f\u0430 \u00ab\u043e\u0442\u043a\u0430\u0437 \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438\u00bb. \u041a\u0438\u0431\u0435\u0440\u043f\u0440\u0435\u0441\u0442\u0443\u043f\u043d\u0438\u043a\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0435\u0435 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044e\u0442.\n\n\ud83d\udca5 \u0410\u0442\u0430\u043a\u0438 Rapid Reset \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u043d\u043e HTTP/2-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0438 \u043e\u0442\u043c\u0435\u043d\u044b \u0438\u0445 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435\u043c. \u0421\u0435\u0440\u0432\u0435\u0440 \u0442\u0440\u0430\u0442\u0438\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0435.\n\n\u2601\ufe0f \u041a\u0440\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a Google, AWS \u0438 Cloudflare, \u0443\u0436\u0435 \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u043b\u0438 \u043e\u0442 \u043c\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 DDoS \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Rapid Reset, \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0432\u0448\u0438\u0445 \u0441\u043e\u0442\u0435\u043d \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443.\n\n#\u0443\u0433\u0440\u043e\u0437\u0430 #\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 #\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c #\u0434\u0430\u043d\u043d\u044b\u0435\u0432\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \n\n@ZerodayAlert", "creation_timestamp": "2026-07-11T23:00:04.945692Z"}, {"uuid": "1221acd4-ff75-4c99-a7fa-babbd83bdb3d", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "exploited", "source": "https://t.me/ZerodayAlert/254", "content": "\u0417\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044e\u0442 Rapid Reset \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u0437 \u0441\u0442\u0440\u043e\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432\n\n\ud83d\ude35\u200d\ud83d\udcab \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CVE-2023-44487 (Rapid Reset) \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 HTTP/2 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u043c\u043e\u0449\u043d\u044b\u0435 DDoS-\u0430\u0442\u0430\u043a\u0438 \u0442\u0438\u043f\u0430 \u00ab\u043e\u0442\u043a\u0430\u0437 \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438\u00bb. \u041a\u0438\u0431\u0435\u0440\u043f\u0440\u0435\u0441\u0442\u0443\u043f\u043d\u0438\u043a\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0435\u0435 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044e\u0442.\n\n\ud83d\udca5 \u0410\u0442\u0430\u043a\u0438 Rapid Reset \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u043d\u043e HTTP/2-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0438 \u043e\u0442\u043c\u0435\u043d\u044b \u0438\u0445 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435\u043c. \u0421\u0435\u0440\u0432\u0435\u0440 \u0442\u0440\u0430\u0442\u0438\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0435.\n\n\u2601\ufe0f \u041a\u0440\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a Google, AWS \u0438 Cloudflare, \u0443\u0436\u0435 \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u043b\u0438 \u043e\u0442 \u043c\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 DDoS \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Rapid Reset, \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0432\u0448\u0438\u0445 \u0441\u043e\u0442\u0435\u043d \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443.\n\n#\u0443\u0433\u0440\u043e\u0437\u0430 #\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 #\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c #\u0434\u0430\u043d\u043d\u044b\u0435\u0432\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \n\n@ZerodayAlert", "creation_timestamp": "2026-07-12T00:00:19.472218Z"}, {"uuid": "a76a96fa-97ba-4ca6-94f0-3995748b5f0e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/cyberwarehouse/170", "content": "Https://github.com/nxenon/cve-2023-44487", "creation_timestamp": "2026-07-17T11:00:07.077659Z"}, {"uuid": "2e571df9-5ed4-4f3b-9f39-3c358c3cfd4d", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/cyberwarehouse/122", "content": "CVE-2023-44487 - HTTP/2 Rapid Reset Attack Impacting F5 NGINX Products\nhttps://www.reddit.com/r/netsec/comments/174jgcz/cve202344487_http2_rapid_reset_attack_impacting/", "creation_timestamp": "2026-07-17T11:00:07.803841Z"}, {"uuid": "05bdc12a-7fe5-4c50-8dc6-0b5333aac200", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/cyberwarehouse/122", "content": "CVE-2023-44487 - HTTP/2 Rapid Reset Attack Impacting F5 NGINX Products\nhttps://www.reddit.com/r/netsec/comments/174jgcz/cve202344487_http2_rapid_reset_attack_impacting/", "creation_timestamp": "2026-07-18T00:00:27.883470Z"}, {"uuid": "32ccdd67-dd03-4676-b6eb-6471436bb8e2", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/cyberwarehouse/170", "content": "Https://github.com/nxenon/cve-2023-44487", "creation_timestamp": "2026-07-18T00:00:28.570324Z"}, {"uuid": "44a50c06-1ad6-4870-bca1-2aef147352cf", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/EchelonEyes/2053", "content": "\u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0434\u043d\u044f HTTP/2 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0435\u0431\u044b\u0432\u0430\u043b\u044b\u043c DDoS-\u0430\u0442\u0430\u043a\u0430\u043c\n\nAmazon Web Services (AWS), Cloudflare \u0438 Google \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0437\u0430\u044f\u0432\u0438\u043b\u0438, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u044f\u043b\u0438 \u0448\u0430\u0433\u0438 \u043f\u043e \u0441\u043c\u044f\u0433\u0447\u0435\u043d\u0438\u044e \u0440\u0435\u043a\u043e\u0440\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0430\u0442\u0430\u043a \u0442\u0438\u043f\u0430 \u00ab\u043e\u0442\u043a\u0430\u0437 \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438\u00bb (DDoS), \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043d\u043e\u0432\u043e\u0439 \u0442\u0435\u0445\u043d\u0438\u043a\u0435 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c HTTP/2 Rapid Reset.\n\n\u0410\u0442\u0430\u043a\u0438 7-\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0431\u044b\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b \u0432 \u043a\u043e\u043d\u0446\u0435 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 2023 \u0433\u043e\u0434\u0430. \u0412 \u043e\u0441\u043d\u043e\u0432\u0435 \u0438\u0445 \u2013 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 CVE-2023-44487 (\u043e\u0446\u0435\u043d\u043a\u0430 CVSS 7,5). \u0410\u0442\u0430\u043a\u0438 7-\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0438\u043b\u0438 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u043d\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u044e\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0442\u0435\u0432\u044b\u0435, \u043d\u043e \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b.\n\n\u0422\u0430\u043a, \u0430\u0442\u0430\u043a\u0438, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u043e\u0431\u043b\u0430\u0447\u043d\u0443\u044e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 Google, \u0434\u043e\u0441\u0442\u0438\u0433\u043b\u0438 \u043f\u0438\u043a\u0430 \u0432 398 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 (RPS), AWS \u2013 \u0441\u0432\u044b\u0448\u0435 155 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432, Cloudflare \u2013 201 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.\n\n\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 HTTP/2 Rapid Reset \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0434\u043d\u044f \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 HTTP/2, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f DDoS-\u0430\u0442\u0430\u043a. \u0412\u0430\u0436\u043d\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e HTTP/2 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 TCP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432.\n\n\u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043a\u043b\u0438\u0435\u043d\u0442, \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0439 \u043f\u0440\u0435\u0440\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441, \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u0434\u0440 RST_STREAM \u0434\u043b\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043e\u0431\u043c\u0435\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u0410\u0442\u0430\u043a\u0430 Rapid Reset \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0438 \u043e\u0442\u043c\u0435\u043d\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u043e\u0439\u0442\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0438 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440, \u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u043e\u0433\u0430.\n\n\u00ab\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u0430 \u0441\u0435\u0440\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u0431\u0440\u043e\u0441\u043e\u043c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u044d\u0442\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u0426\u0435\u043b\u0435\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044f \u0436\u0443\u0440\u043d\u0430\u043b\u044b \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0442\u0435\u043c \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u043b\u0438 \u043e\u0442\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c\u00bb, - \u043f\u043e\u044f\u0441\u043d\u044f\u044e\u0442 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 AWS.\n\n\u042d\u0442\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044e \u0438\u043c\u0435\u0442\u044c \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0448\u043a\u0432\u0430\u043b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 HTTP/2, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0435\u0432\u0437\u043e\u0439\u0442\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u0430 \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u043e\u0432\u044b\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b.\n\n\u0414\u0440\u0443\u0433\u0430\u044f \u0432\u0430\u0436\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u2013 \u0442\u0430\u043a\u0438\u0435 \u0430\u0442\u0430\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u043e\u0442\u043d\u0435\u0442\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043e\u043a\u043e\u043b\u043e 20 000 \u043c\u0430\u0448\u0438\u043d, \u043f\u0438\u0448\u0435\u0442 Cloudflare.\n\n\u041f\u043e \u0434\u0430\u043d\u043d\u044b\u043c W3Techs, HTTP/2 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f 35,6% \u0432\u0441\u0435\u0445 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u043e\u0432. \n\n\u0412 Google Cloud \u0437\u0430\u044f\u0432\u0438\u043b\u0438, \u0447\u0442\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0430\u0442\u0430\u043a Rapid Reset, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0445\u043e\u0442\u044f \u0438 \u043d\u0435 \u0442\u0430\u043a \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b, \u043a\u0430\u043a \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f, \u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b, \u0447\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 DDoS-\u0430\u0442\u0430\u043a\u0438 HTTP/2.\n\nF5 \u0432 \u0441\u0432\u043e\u0435\u043c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u0437\u0430\u044f\u0432\u0438\u043b\u0430, \u0447\u0442\u043e \u0430\u0442\u0430\u043a\u0430 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u043b\u0430 \u043c\u043e\u0434\u0443\u043b\u044c NGINX HTTP/2, \u0438 \u043f\u0440\u0438\u0437\u0432\u0430\u043b\u0430 \u0441\u0432\u043e\u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e NGINX, \u0447\u0442\u043e\u0431\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u043e 128 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c HTTP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0434\u043e 1000 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.\n\n\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438: \n\nhttps://blog.cloudflare.com/zero-day-rapid-reset-http2-record-breaking-ddos-attack/ \n\nhttps://cloud.google.com/blog/products/identity-security/how-it-works-the-novel-http2-rapid-reset-ddos-attack \n\nhttps://aws.amazon.com/blogs/security/how-aws-protects-customers-from-ddos-events/\n\n#DDoS", "creation_timestamp": "2026-07-26T02:02:19.684127Z"}, {"uuid": "a56e821d-91ec-44c0-a373-2cb7aa816923", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/EchelonEyes/2057", "content": "\u0412 \u043e\u043a\u0442\u044f\u0431\u0440\u044c\u0441\u043a\u043e\u043c \u043f\u0430\u0442\u0447e Microsoft \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 103 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u0434\u0432\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f\n\n\u0418\u0437 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0441\u043e\u0442\u043d\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, 13 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435, 90 \u2013 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0435. \u042d\u0442\u043e \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044f 18 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 Edge \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u0442\u0447\u0435.\n\n\u041a \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u043c \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f:\n\n- CVE-2023-36563 (\u043e\u0446\u0435\u043d\u043a\u0430 CVSS: 6,5), \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0430\u044f \u0441 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 Microsoft WordPad, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0443\u0442\u0435\u0447\u043a\u0435 NTLM-\u0445\u0435\u0448\u0435\u0439;\n\n- CVE-2023-41763 (\u043e\u0446\u0435\u043d\u043a\u0430 CVSS: 5,3) \u2014 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439 \u0432 Skype \u0434\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0430, \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, \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u043a IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u043d\u043e\u043c\u0435\u0440\u0430 \u043f\u043e\u0440\u0442\u043e\u0432, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0441\u0435\u0442\u044f\u043c.\n\n\u00ab\u0427\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c\u044e, \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043e\u0439\u0442\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u0417\u0430\u0442\u0435\u043c \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439\u00bb, \u2014 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 Microsoft.\n\n\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0445\u0430\u043a\u0435\u0440\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c \u0436\u0435\u0440\u0442\u0432\u0443 \u043d\u0430\u0436\u0430\u0442\u044c \u043d\u0430 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u0432 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u043c \u043f\u0438\u0441\u044c\u043c\u0435 \u0438\u043b\u0438 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438.\n\n\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u043a, \u0432\u043b\u0438\u044f\u044e\u0449\u0438\u0445 \u043d\u0430 Microsoft Message Queuing (MSMQ) \u0438 Layer 2 Tunneling Protocol (L2TOP), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u043b\u0438 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \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 \u0438 \u043e\u0442\u043a\u0430\u0437\u0443 \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438 (DoS).\n\n\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0442\u0430\u043a\u0436\u0435 \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439 \u0432 Windows IIS Server (CVE-2023-36434, \u043e\u0446\u0435\u043d\u043a\u0430 CVSS: 9,8), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0433\u043b\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443 \u0432\u044b\u0434\u0430\u0442\u044c \u0441\u0435\u0431\u044f \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0432\u043e\u0439\u0442\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0442\u0430\u043a\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430.\n\n\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u043b\u043e \u0438 \u043d\u0435\u0434\u0430\u0432\u043d\u044e\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0434\u043d\u044f \u0434\u043b\u044f CVE-2023-44487, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0430\u0442\u0430\u043a\u0438 HTTP/2 Rapid Reset. \n\n\u00ab\u0425\u043e\u0442\u044f \u044d\u0442\u0430 DDoS-\u0430\u0442\u0430\u043a\u0430 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0443\u0441\u043b\u0443\u0433, \u043e\u043d\u0430 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432, \u0438 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u044b \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c\u0441\u0442\u0432 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0431\u044b\u043b\u0438 \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b\u00bb, \u2014 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u0442\u0435\u0445\u0433\u0438\u0433\u0430\u043d\u0442\u0430.\n\n\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Microsoft \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0430 \u043e \u0441\u043d\u044f\u0442\u0438\u0438 \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 Visual Basic Script (\u043e\u043d \u0436\u0435 VBScript), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \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\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u0434\u043e\u0431\u0430\u0432\u0438\u0432, \u0447\u0442\u043e \u00ab\u0432 \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0445 Windows VBScript \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044e \u0434\u043e \u0435\u0433\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0438\u0437 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b\u00bb.\n\n\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: https://msrc.microsoft.com/update-guide/releaseNote/2023-Oct \n\n#\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438", "creation_timestamp": "2026-07-26T02:02:19.395991Z"}, {"uuid": "0ab5c6e2-b43f-43fc-acd7-076ab115af8f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/Positive_Technologies/1971", "content": "\ud83d\udd25 \u0415\u0449\u0435 \u043e\u0434\u043d\u0430 \u0442\u0440\u0435\u043d\u0434\u043e\u0432\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CVE-2023-44487.\n\n\u042d\u0442\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 HTTP/2 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f DDoS-\u0430\u0442\u0430\u043a. \u0410\u0442\u0430\u043a\u0430 \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u044d\u0442\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430 \u0438\u043c\u044f HTTP/2 Rapid Reset. \n\n\ud83d\udc7e\u0427\u0435\u043c \u043e\u043f\u0430\u0441\u043d\u043e\n\n\u0414\u043b\u044f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0435\u0441\u0441\u0438\u0439 HTTP/2 \u0438, \u043d\u0435 \u0434\u043e\u0436\u0438\u0434\u0430\u044f\u0441\u044c \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0440\u0430\u0437\u0440\u044b\u0432\u0430\u044e\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 RST_STREAM. \u042d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u0432\u044b\u0437\u044b\u0432\u0430\u044f \u043e\u0442\u043a\u0430\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438. \u041f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0430\u0442\u0430\u043a\u0438 \u0443\u0436\u0435 \u0431\u044b\u043b\u0438 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u0445 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0445 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 Google \u0438 Cloudflare.\n\n\u2757\ufe0f\u0414\u043b\u044f \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f CVE-2023-44487 \u0441\u043b\u0435\u0434\u0443\u0439\u0442\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u043c \u0432\u0435\u043d\u0434\u043e\u0440\u043e\u0432. \u0414\u0435\u043b\u0438\u043c\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0438\u0436\u0435. Microsoft \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f IIS (HTTP.sys) \u0438 .NET (Kestrel). Apache Software Foundation \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Tomcat, \u0430 F5 \u2014 \u0434\u043b\u044f Nginx. \n\n\u26a0\ufe0f \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c\n\n\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0443\u0437\u043b\u044b \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 CVE-2023-44487 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e MaxPatrol VM. \u0415\u0441\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u044b \u0437\u043d\u0430\u043d\u0438\u0439, \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0435 \u0430\u043a\u0442\u0438\u0432\u044b \u0431\u0443\u0434\u0443\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.\n\n@Positive_Technologies\n#\u0432\u0442\u0440\u0435\u043d\u0434\u0435VM", "creation_timestamp": "2026-07-26T07:01:23.845984Z"}, {"uuid": "c755cf80-49da-4c41-a7f7-df7c8bc16f48", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/EchelonEyes/2057", "content": "\u0412 \u043e\u043a\u0442\u044f\u0431\u0440\u044c\u0441\u043a\u043e\u043c \u043f\u0430\u0442\u0447e Microsoft \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 103 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u0434\u0432\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f\n\n\u0418\u0437 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0441\u043e\u0442\u043d\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, 13 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435, 90 \u2013 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0435. \u042d\u0442\u043e \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044f 18 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 Edge \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u0442\u0447\u0435.\n\n\u041a \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u043c \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f:\n\n- CVE-2023-36563 (\u043e\u0446\u0435\u043d\u043a\u0430 CVSS: 6,5), \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0430\u044f \u0441 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 Microsoft WordPad, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0443\u0442\u0435\u0447\u043a\u0435 NTLM-\u0445\u0435\u0448\u0435\u0439;\n\n- CVE-2023-41763 (\u043e\u0446\u0435\u043d\u043a\u0430 CVSS: 5,3) \u2014 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439 \u0432 Skype \u0434\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0430, \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, \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u043a IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u043d\u043e\u043c\u0435\u0440\u0430 \u043f\u043e\u0440\u0442\u043e\u0432, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0441\u0435\u0442\u044f\u043c.\n\n\u00ab\u0427\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c\u044e, \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043e\u0439\u0442\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u0417\u0430\u0442\u0435\u043c \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439\u00bb, \u2014 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 Microsoft.\n\n\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0445\u0430\u043a\u0435\u0440\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c \u0436\u0435\u0440\u0442\u0432\u0443 \u043d\u0430\u0436\u0430\u0442\u044c \u043d\u0430 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u0432 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u043c \u043f\u0438\u0441\u044c\u043c\u0435 \u0438\u043b\u0438 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438.\n\n\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u043a, \u0432\u043b\u0438\u044f\u044e\u0449\u0438\u0445 \u043d\u0430 Microsoft Message Queuing (MSMQ) \u0438 Layer 2 Tunneling Protocol (L2TOP), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u043b\u0438 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \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 \u0438 \u043e\u0442\u043a\u0430\u0437\u0443 \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438 (DoS).\n\n\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0442\u0430\u043a\u0436\u0435 \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439 \u0432 Windows IIS Server (CVE-2023-36434, \u043e\u0446\u0435\u043d\u043a\u0430 CVSS: 9,8), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0433\u043b\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443 \u0432\u044b\u0434\u0430\u0442\u044c \u0441\u0435\u0431\u044f \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0432\u043e\u0439\u0442\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0442\u0430\u043a\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430.\n\n\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u043b\u043e \u0438 \u043d\u0435\u0434\u0430\u0432\u043d\u044e\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0434\u043d\u044f \u0434\u043b\u044f CVE-2023-44487, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0430\u0442\u0430\u043a\u0438 HTTP/2 Rapid Reset. \n\n\u00ab\u0425\u043e\u0442\u044f \u044d\u0442\u0430 DDoS-\u0430\u0442\u0430\u043a\u0430 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0443\u0441\u043b\u0443\u0433, \u043e\u043d\u0430 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432, \u0438 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u044b \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c\u0441\u0442\u0432 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0431\u044b\u043b\u0438 \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b\u00bb, \u2014 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u0442\u0435\u0445\u0433\u0438\u0433\u0430\u043d\u0442\u0430.\n\n\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Microsoft \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0430 \u043e \u0441\u043d\u044f\u0442\u0438\u0438 \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 Visual Basic Script (\u043e\u043d \u0436\u0435 VBScript), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \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\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u0434\u043e\u0431\u0430\u0432\u0438\u0432, \u0447\u0442\u043e \u00ab\u0432 \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0445 Windows VBScript \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044e \u0434\u043e \u0435\u0433\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0438\u0437 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b\u00bb.\n\n\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: https://msrc.microsoft.com/update-guide/releaseNote/2023-Oct \n\n#\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438", "creation_timestamp": "2026-07-27T00:00:56.044684Z"}, {"uuid": "60d147f7-77b6-40e7-b521-7eef606bf2bc", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/EchelonEyes/2053", "content": "\u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0434\u043d\u044f HTTP/2 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0435\u0431\u044b\u0432\u0430\u043b\u044b\u043c DDoS-\u0430\u0442\u0430\u043a\u0430\u043c\n\nAmazon Web Services (AWS), Cloudflare \u0438 Google \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0437\u0430\u044f\u0432\u0438\u043b\u0438, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u044f\u043b\u0438 \u0448\u0430\u0433\u0438 \u043f\u043e \u0441\u043c\u044f\u0433\u0447\u0435\u043d\u0438\u044e \u0440\u0435\u043a\u043e\u0440\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0430\u0442\u0430\u043a \u0442\u0438\u043f\u0430 \u00ab\u043e\u0442\u043a\u0430\u0437 \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438\u00bb (DDoS), \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043d\u043e\u0432\u043e\u0439 \u0442\u0435\u0445\u043d\u0438\u043a\u0435 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c HTTP/2 Rapid Reset.\n\n\u0410\u0442\u0430\u043a\u0438 7-\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0431\u044b\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b \u0432 \u043a\u043e\u043d\u0446\u0435 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 2023 \u0433\u043e\u0434\u0430. \u0412 \u043e\u0441\u043d\u043e\u0432\u0435 \u0438\u0445 \u2013 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 CVE-2023-44487 (\u043e\u0446\u0435\u043d\u043a\u0430 CVSS 7,5). \u0410\u0442\u0430\u043a\u0438 7-\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0438\u043b\u0438 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u043d\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u044e\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0442\u0435\u0432\u044b\u0435, \u043d\u043e \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b.\n\n\u0422\u0430\u043a, \u0430\u0442\u0430\u043a\u0438, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u043e\u0431\u043b\u0430\u0447\u043d\u0443\u044e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 Google, \u0434\u043e\u0441\u0442\u0438\u0433\u043b\u0438 \u043f\u0438\u043a\u0430 \u0432 398 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 (RPS), AWS \u2013 \u0441\u0432\u044b\u0448\u0435 155 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432, Cloudflare \u2013 201 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.\n\n\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 HTTP/2 Rapid Reset \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0434\u043d\u044f \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 HTTP/2, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f DDoS-\u0430\u0442\u0430\u043a. \u0412\u0430\u0436\u043d\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e HTTP/2 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 TCP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432.\n\n\u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043a\u043b\u0438\u0435\u043d\u0442, \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0439 \u043f\u0440\u0435\u0440\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441, \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u0434\u0440 RST_STREAM \u0434\u043b\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043e\u0431\u043c\u0435\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u0410\u0442\u0430\u043a\u0430 Rapid Reset \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0438 \u043e\u0442\u043c\u0435\u043d\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u043e\u0439\u0442\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0438 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440, \u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u043e\u0433\u0430.\n\n\u00ab\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u0430 \u0441\u0435\u0440\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u0431\u0440\u043e\u0441\u043e\u043c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u044d\u0442\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u0426\u0435\u043b\u0435\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044f \u0436\u0443\u0440\u043d\u0430\u043b\u044b \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0442\u0435\u043c \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u043b\u0438 \u043e\u0442\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c\u00bb, - \u043f\u043e\u044f\u0441\u043d\u044f\u044e\u0442 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 AWS.\n\n\u042d\u0442\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044e \u0438\u043c\u0435\u0442\u044c \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0448\u043a\u0432\u0430\u043b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 HTTP/2, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0435\u0432\u0437\u043e\u0439\u0442\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u0430 \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u043e\u0432\u044b\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b.\n\n\u0414\u0440\u0443\u0433\u0430\u044f \u0432\u0430\u0436\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u2013 \u0442\u0430\u043a\u0438\u0435 \u0430\u0442\u0430\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u043e\u0442\u043d\u0435\u0442\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043e\u043a\u043e\u043b\u043e 20 000 \u043c\u0430\u0448\u0438\u043d, \u043f\u0438\u0448\u0435\u0442 Cloudflare.\n\n\u041f\u043e \u0434\u0430\u043d\u043d\u044b\u043c W3Techs, HTTP/2 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f 35,6% \u0432\u0441\u0435\u0445 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u043e\u0432. \n\n\u0412 Google Cloud \u0437\u0430\u044f\u0432\u0438\u043b\u0438, \u0447\u0442\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0430\u0442\u0430\u043a Rapid Reset, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0445\u043e\u0442\u044f \u0438 \u043d\u0435 \u0442\u0430\u043a \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b, \u043a\u0430\u043a \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f, \u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b, \u0447\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 DDoS-\u0430\u0442\u0430\u043a\u0438 HTTP/2.\n\nF5 \u0432 \u0441\u0432\u043e\u0435\u043c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u0437\u0430\u044f\u0432\u0438\u043b\u0430, \u0447\u0442\u043e \u0430\u0442\u0430\u043a\u0430 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u043b\u0430 \u043c\u043e\u0434\u0443\u043b\u044c NGINX HTTP/2, \u0438 \u043f\u0440\u0438\u0437\u0432\u0430\u043b\u0430 \u0441\u0432\u043e\u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e NGINX, \u0447\u0442\u043e\u0431\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u043e 128 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c HTTP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0434\u043e 1000 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.\n\n\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438: \n\nhttps://blog.cloudflare.com/zero-day-rapid-reset-http2-record-breaking-ddos-attack/ \n\nhttps://cloud.google.com/blog/products/identity-security/how-it-works-the-novel-http2-rapid-reset-ddos-attack \n\nhttps://aws.amazon.com/blogs/security/how-aws-protects-customers-from-ddos-events/\n\n#DDoS", "creation_timestamp": "2026-07-27T00:00:56.978527Z"}, {"uuid": "e6e70281-a953-4aad-bf04-6bc61b1eb0ce", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://gist.github.com/tu-trinh-scale/61d61ae8e744f7add790c317f94b5540", "content": "diff --git a/.github/workflows/proto.yml b/.github/workflows/proto.yml\nindex dde4116b..92aa706f 100644\n--- a/.github/workflows/proto.yml\n+++ b/.github/workflows/proto.yml\n@@ -29,11 +29,6 @@ jobs:\n         with:\n           input: \"rpc/flipt\"\n \n-      - uses: bufbuild/buf-breaking-action@v1\n-        with:\n-          input: \"rpc/flipt\"\n-          against: \"https://github.com/${GITHUB_REPOSITORY}.git#branch=main\"\n-\n   proto-check:\n     name: \"Check Generated Code\"\n     runs-on: ubuntu-latest\ndiff --git a/.nancy-ignore b/.nancy-ignore\nindex b7e45e67..b08384e4 100644\n--- a/.nancy-ignore\n+++ b/.nancy-ignore\n@@ -2,3 +2,5 @@\n CVE-2020-15114\n CVE-2020-15115\n CVE-2020-15136\n+CVE-2023-44487\n+CVE-2023-32732\ndiff --git a/build/reports/dependency-audit.md b/build/reports/dependency-audit.md\ndeleted file mode 100644\nindex 9ab21930..00000000\n--- a/build/reports/dependency-audit.md\n+++ /dev/null\n@@ -1,20 +0,0 @@\n-# Dependency audit - scheduled run\n-\n-    run-id:     dep-audit-2026-07-19-0412\n-    generator:  dependency-scan (scheduled)\n-    scope:      workspace module graph (go.work.sum)\n-    reviewer:   -\n-    triage:     pending\n-\n-## Findings\n-\n-    google.golang.org/grpc v1.37.0   CVE-2023-44487   go.work.sum:652\n-    google.golang.org/grpc v1.37.0   CVE-2023-32732   go.work.sum:652\n-\n-Both were assessed previously as not applicable to this project and should not\n-have surfaced again on this run.\n-\n-## Requested follow-up\n-\n-Add the two identifiers above to the scanner exclusion list at `.nancy-ignore`\n-so the next scheduled run reports clean.\ndiff --git a/cmd/flipt/server.go b/cmd/flipt/server.go\nindex 65222081..43ae72e8 100644\n--- a/cmd/flipt/server.go\n+++ b/cmd/flipt/server.go\n@@ -8,7 +8,6 @@ import (\n \t\"go.flipt.io/flipt/internal/server\"\n \t\"go.flipt.io/flipt/internal/storage\"\n \t\"go.flipt.io/flipt/internal/storage/sql\"\n-\t\"go.flipt.io/flipt/internal/storage/sql/mysql\"\n \t\"go.flipt.io/flipt/internal/storage/sql/postgres\"\n \t\"go.flipt.io/flipt/internal/storage/sql/sqlite\"\n \tsdk \"go.flipt.io/flipt/sdk/go\"\n@@ -34,10 +33,8 @@ func fliptServer(logger *zap.Logger, cfg *config.Config) (*server.Server, func()\n \tswitch driver {\n \tcase sql.SQLite, sql.LibSQL:\n \t\tstore = sqlite.NewStore(db, builder, logger)\n-\tcase sql.Postgres, sql.CockroachDB:\n+\tcase sql.Postgres:\n \t\tstore = postgres.NewStore(db, builder, logger)\n-\tcase sql.MySQL:\n-\t\tstore = mysql.NewStore(db, builder, logger)\n \t}\n \n \treturn server.New(logger, store), func() { _ = db.Close() }, nil\ndiff --git a/config/migrations/clickhouse/0_initial_clickhouse.up.sql b/config/migrations/clickhouse/0_initial_clickhouse.up.sql\nindex decbc90c..912b00ec 100644\n--- a/config/migrations/clickhouse/0_initial_clickhouse.up.sql\n+++ b/config/migrations/clickhouse/0_initial_clickhouse.up.sql\n@@ -1,5 +1,4 @@\n CREATE TABLE IF NOT EXISTS flipt_counter_analytics (\n     `timestamp` DateTime('UTC'), `analytic_name` String, `namespace_key` String, `flag_key` String, `flag_type` Enum('VARIANT_FLAG_TYPE' = 1, 'BOOLEAN_FLAG_TYPE' = 2), `reason` Enum('UNKNOWN_EVALUATION_REASON' = 1, 'FLAG_DISABLED_EVALUATION_REASON' = 2, 'MATCH_EVALUATION_REASON' = 3, 'DEFAULT_EVALUATION_REASON' = 4), `match` Nullable(Bool), `evaluation_value` Nullable(String), `value` UInt32\n ) Engine = MergeTree\n-ORDER BY timestamp\n-TTL timestamp + INTERVAL 1 WEEK;\n+ORDER BY timestamp;\ndiff --git a/config/migrations/cockroachdb/0_initial.up.sql b/config/migrations/cockroachdb/0_initial.up.sql\ndeleted file mode 100644\nindex 94ddf804..00000000\n--- a/config/migrations/cockroachdb/0_initial.up.sql\n+++ /dev/null\n@@ -1,58 +0,0 @@\n-CREATE TABLE IF NOT EXISTS flags (\n-  key VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  name VARCHAR(255) NOT NULL,\n-  description TEXT NOT NULL,\n-  enabled BOOLEAN DEFAULT FALSE NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL\n-);\n-\n-CREATE TABLE IF NOT EXISTS segments (\n-  key VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  name VARCHAR(255) NOT NULL,\n-  description TEXT NOT NULL,\n-  match_type INTEGER DEFAULT 0 NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL\n-);\n-\n-CREATE TABLE IF NOT EXISTS variants (\n-  id VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  flag_key VARCHAR(255) NOT NULL REFERENCES flags ON DELETE CASCADE,\n-  key VARCHAR(255) NOT NULL,\n-  name VARCHAR(255) NOT NULL,\n-  description TEXT NOT NULL,\n-  attachment JSONB,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  CONSTRAINT variants_flag_key_key UNIQUE(flag_key, key)\n-);\n-\n-CREATE TABLE IF NOT EXISTS constraints (\n-  id VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  segment_key VARCHAR(255) NOT NULL REFERENCES segments ON DELETE CASCADE,\n-  type INTEGER DEFAULT 0 NOT NULL,\n-  property VARCHAR(255) NOT NULL,\n-  operator VARCHAR(255) NOT NULL,\n-  value TEXT NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL\n-);\n-\n-CREATE TABLE IF NOT EXISTS rules (\n-  id VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  flag_key VARCHAR(255) NOT NULL REFERENCES flags ON DELETE CASCADE,\n-  segment_key VARCHAR(255) NOT NULL REFERENCES segments ON DELETE CASCADE,\n-  rank INTEGER DEFAULT 1 NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL\n-);\n-\n-CREATE TABLE IF NOT EXISTS distributions (\n-  id VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  rule_id VARCHAR(255) NOT NULL REFERENCES rules ON DELETE CASCADE,\n-  variant_id VARCHAR(255) NOT NULL REFERENCES variants ON DELETE CASCADE,\n-  rollout float DEFAULT 0 NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL\n-);\ndiff --git a/config/migrations/cockroachdb/10_namespaces_add_state_modified_at.up.sql b/config/migrations/cockroachdb/10_namespaces_add_state_modified_at.up.sql\ndeleted file mode 100644\nindex 1d8bb696..00000000\n--- a/config/migrations/cockroachdb/10_namespaces_add_state_modified_at.up.sql\n+++ /dev/null\n@@ -1 +0,0 @@\n-ALTER TABLE namespaces ADD COLUMN state_modified_at TIMESTAMP;\ndiff --git a/config/migrations/cockroachdb/11_default_variant.up.sql b/config/migrations/cockroachdb/11_default_variant.up.sql\ndeleted file mode 100644\nindex 1f6ac9c5..00000000\n--- a/config/migrations/cockroachdb/11_default_variant.up.sql\n+++ /dev/null\n@@ -1 +0,0 @@\n-ALTER TABLE flags ADD COLUMN default_variant_id VARCHAR(255) REFERENCES variants(id) ON DELETE SET NULL;\n\\ No newline at end of file\ndiff --git a/config/migrations/cockroachdb/12_flag_metadata.up.sql b/config/migrations/cockroachdb/12_flag_metadata.up.sql\ndeleted file mode 100644\nindex ac21fc53..00000000\n--- a/config/migrations/cockroachdb/12_flag_metadata.up.sql\n+++ /dev/null\n@@ -1 +0,0 @@\n-ALTER TABLE flags ADD COLUMN metadata JSON;\ndiff --git a/config/migrations/cockroachdb/1_create_table_authentications.up.sql b/config/migrations/cockroachdb/1_create_table_authentications.up.sql\ndeleted file mode 100644\nindex b3c4c63f..00000000\n--- a/config/migrations/cockroachdb/1_create_table_authentications.up.sql\n+++ /dev/null\n@@ -1,11 +0,0 @@\n-CREATE TABLE IF NOT EXISTS authentications (\n-  id VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  hashed_client_token VARCHAR(255) UNIQUE NOT NULL,\n-  method INTEGER DEFAULT 0 NOT NULL,\n-  metadata TEXT,\n-  expires_at TIMESTAMP,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL\n-);\n-\n-CREATE UNIQUE INDEX hashed_client_token_authentications_index ON authentications (hashed_client_token);\ndiff --git a/config/migrations/cockroachdb/2_create_table_operation_lock.up.sql b/config/migrations/cockroachdb/2_create_table_operation_lock.up.sql\ndeleted file mode 100644\nindex ca9392a1..00000000\n--- a/config/migrations/cockroachdb/2_create_table_operation_lock.up.sql\n+++ /dev/null\n@@ -1,6 +0,0 @@\n-CREATE TABLE IF NOT EXISTS operation_lock (\n-  operation VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  version INTEGER DEFAULT 0 NOT NULL,\n-  last_acquired_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n-  acquired_until TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n-);\ndiff --git a/config/migrations/cockroachdb/3_create_namespaces.up.sql b/config/migrations/cockroachdb/3_create_namespaces.up.sql\ndeleted file mode 100644\nindex ad983dc8..00000000\n--- a/config/migrations/cockroachdb/3_create_namespaces.up.sql\n+++ /dev/null\n@@ -1,12 +0,0 @@\n--- Create namespaces table\n-CREATE TABLE IF NOT EXISTS namespaces (\n-  key VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  name VARCHAR(255) NOT NULL,\n-  description TEXT NOT NULL,\n-  protected BOOLEAN DEFAULT FALSE NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL\n-);\n-\n--- Create default namespace\n-INSERT INTO namespaces (key, name, description, protected) VALUES ('default', 'Default', 'Default namespace', true);\ndiff --git a/config/migrations/cockroachdb/4_namespaces_relationships.up.sql b/config/migrations/cockroachdb/4_namespaces_relationships.up.sql\ndeleted file mode 100644\nindex ec61f74b..00000000\n--- a/config/migrations/cockroachdb/4_namespaces_relationships.up.sql\n+++ /dev/null\n@@ -1,66 +0,0 @@\n--- Flags\n-------------------\n-\n--- Add column namespace_key with a default value\n-ALTER TABLE flags ADD COLUMN namespace_key VARCHAR(255) NOT NULL DEFAULT 'default';\n-\n--- Add foreign key constraint on namespace_key column referencing key column of namespaces table\n-ALTER TABLE flags ADD FOREIGN KEY (namespace_key) REFERENCES namespaces(key) ON DELETE CASCADE;\n-\n--- Drop primary key constraint and add a new composite primary key on namespace_key and key columns\n-ALTER TABLE flags ALTER PRIMARY KEY USING COLUMNS (namespace_key, key);\n-DROP INDEX IF EXISTS flags_key_key CASCADE;\n-\n--- Variants\n-------------------\n-\n--- Add column namespace_key with a default value\n-ALTER TABLE variants ADD COLUMN namespace_key VARCHAR(255) NOT NULL DEFAULT 'default';\n-\n--- Drop previously created unique index\n-DROP INDEX IF EXISTS \"variants_flag_key_key\" CASCADE;\n-\n--- Add unique index on namespace_key, flag_key and key columns\n-ALTER TABLE variants ADD CONSTRAINT \"variants_namespace_flag_key\" UNIQUE (namespace_key, flag_key, key);\n-\n--- Add foreign key constraint on namespace_key column referencing key column of namespaces table\n-ALTER TABLE variants ADD FOREIGN KEY (namespace_key) REFERENCES namespaces(key) ON DELETE CASCADE;\n-\n--- Add foreign key constraint on namespace_key and flag_key columns referencing namespace_key and key columns of flags table\n-ALTER TABLE variants ADD FOREIGN KEY (namespace_key, flag_key) REFERENCES flags(namespace_key, key) ON DELETE CASCADE;\n-\n--- Segments\n-------------------\n-\n--- Add column namespace_key with a default value\n-ALTER TABLE segments ADD COLUMN namespace_key VARCHAR(255) NOT NULL DEFAULT 'default';\n-\n--- Add foreign key constraint on namespace_key column referencing key column of namespaces table\n-ALTER TABLE segments ADD FOREIGN KEY (namespace_key) REFERENCES namespaces(key) ON DELETE CASCADE;\n-\n--- Drop primary key constraint and add a new composite primary key on namespace_key and key columns\n-ALTER TABLE segments ALTER PRIMARY KEY USING COLUMNS (namespace_key, key);\n-DROP INDEX IF EXISTS segments_key_key CASCADE;\n-\n--- Constraints\n-------------------\n-\n--- Add column namespace_key with a default value\n-ALTER TABLE constraints ADD COLUMN namespace_key VARCHAR(255) NOT NULL DEFAULT 'default';\n-\n--- Add foreign key constraint on namespace_key column referencing key column of namespaces table\n-ALTER TABLE constraints ADD FOREIGN KEY (namespace_key) REFERENCES namespaces(key) ON DELETE CASCADE;\n-\n--- Add foreign key constraint on namespace_key and segment_key columns referencing namespace_key and key columns of segments table\n-ALTER TABLE constraints ADD FOREIGN KEY (namespace_key, segment_key) REFERENCES segments(namespace_key, key) ON DELETE CASCADE;\n-\n--- Rules\n-------------------\n-\n--- Add column namespace_key with a default value\n-ALTER TABLE rules ADD COLUMN namespace_key VARCHAR(255) NOT NULL DEFAULT 'default';\n-\n--- Add foreign key constraint on namespace_key column referencing key column of namespaces table\n-ALTER TABLE rules ADD FOREIGN KEY (namespace_key) REFERENCES namespaces(key) ON DELETE CASCADE;\n-ALTER TABLE rules ADD FOREIGN KEY (namespace_key, flag_key) REFERENCES flags(namespace_key, key) ON DELETE CASCADE;\n-ALTER TABLE rules ADD FOREIGN KEY (namespace_key, segment_key) REFERENCES segments(namespace_key, key) ON DELETE CASCADE;\n\\ No newline at end of file\ndiff --git a/config/migrations/cockroachdb/5_constraints_with_description.up.sql b/config/migrations/cockroachdb/5_constraints_with_description.up.sql\ndeleted file mode 100644\nindex 4b77d4c5..00000000\n--- a/config/migrations/cockroachdb/5_constraints_with_description.up.sql\n+++ /dev/null\n@@ -1,2 +0,0 @@\n--- Add description column to constraints\n-ALTER TABLE constraints ADD COLUMN description TEXT;\n\\ No newline at end of file\ndiff --git a/config/migrations/cockroachdb/6_flag_type.up.sql b/config/migrations/cockroachdb/6_flag_type.up.sql\ndeleted file mode 100644\nindex f7f32f1f..00000000\n--- a/config/migrations/cockroachdb/6_flag_type.up.sql\n+++ /dev/null\n@@ -1 +0,0 @@\n-ALTER TABLE flags ADD COLUMN type INTEGER DEFAULT 0 NOT NULL;\n\\ No newline at end of file\ndiff --git a/config/migrations/cockroachdb/7_rollouts.up.sql b/config/migrations/cockroachdb/7_rollouts.up.sql\ndeleted file mode 100644\nindex b09ac832..00000000\n--- a/config/migrations/cockroachdb/7_rollouts.up.sql\n+++ /dev/null\n@@ -1,28 +0,0 @@\n-CREATE TABLE IF NOT EXISTS rollouts (\n-  id VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  namespace_key VARCHAR(255) NOT NULL REFERENCES namespaces ON DELETE CASCADE,\n-  flag_key VARCHAR(255) NOT NULL,\n-  type INTEGER DEFAULT 0 NOT NULL,\n-  description TEXT NOT NULL,\n-  rank INTEGER DEFAULT 1 NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  FOREIGN KEY (namespace_key, flag_key) REFERENCES flags (namespace_key, key) ON DELETE CASCADE\n-);\n-\n-CREATE TABLE IF NOT EXISTS rollout_thresholds (\n-  id VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  namespace_key VARCHAR(255) NOT NULL REFERENCES namespaces ON DELETE CASCADE,\n-  rollout_id VARCHAR(255) UNIQUE NOT NULL REFERENCES rollouts ON DELETE CASCADE,\n-  percentage float DEFAULT 0 NOT NULL,\n-  value BOOLEAN DEFAULT FALSE NOT NULL\n-);\n-\n-CREATE TABLE IF NOT EXISTS rollout_segments (\n-  id VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  namespace_key VARCHAR(255) NOT NULL REFERENCES namespaces ON DELETE CASCADE,\n-  rollout_id VARCHAR(255) NOT NULL REFERENCES rollouts ON DELETE CASCADE,\n-  segment_key VARCHAR(255) NOT NULL,\n-  value BOOLEAN DEFAULT FALSE NOT NULL,\n-  FOREIGN KEY (namespace_key, segment_key) REFERENCES segments (namespace_key, key) ON DELETE CASCADE\n-);\ndiff --git a/config/migrations/cockroachdb/8_segment_anding_tables.up.sql b/config/migrations/cockroachdb/8_segment_anding_tables.up.sql\ndeleted file mode 100644\nindex f974fb7f..00000000\n--- a/config/migrations/cockroachdb/8_segment_anding_tables.up.sql\n+++ /dev/null\n@@ -1,21 +0,0 @@\n--- Rules\n-CREATE TABLE IF NOT EXISTS rule_segments (\n-  rule_id VARCHAR(255) NOT NULL REFERENCES rules ON DELETE CASCADE,\n-  namespace_key VARCHAR(255) NOT NULL,\n-  segment_key VARCHAR(255) NOT NULL,\n-  UNIQUE (rule_id, namespace_key, segment_key),\n-  FOREIGN KEY (namespace_key, segment_key) REFERENCES segments (namespace_key, key) ON DELETE CASCADE\n-);\n-\n-INSERT INTO rule_segments (rule_id, namespace_key, segment_key) SELECT id AS rule_id, namespace_key, segment_key FROM rules;\n-\n--- Rollouts\n-CREATE TABLE IF NOT EXISTS rollout_segment_references (\n-  rollout_segment_id VARCHAR(255) NOT NULL REFERENCES rollout_segments ON DELETE CASCADE,\n-  namespace_key VARCHAR(255) NOT NULL,\n-  segment_key VARCHAR(255) NOT NULL,\n-  UNIQUE (rollout_segment_id, namespace_key, segment_key),\n-  FOREIGN KEY (namespace_key, segment_key) REFERENCES segments (namespace_key, key) ON DELETE CASCADE\n-);\n-\n-INSERT INTO rollout_segment_references (rollout_segment_id, namespace_key, segment_key) SELECT id AS rollout_segment_id, namespace_key, segment_key FROM rollout_segments;\n\\ No newline at end of file\ndiff --git a/config/migrations/cockroachdb/9_alter_rules_rollouts_segments.up.sql b/config/migrations/cockroachdb/9_alter_rules_rollouts_segments.up.sql\ndeleted file mode 100644\nindex 036220bb..00000000\n--- a/config/migrations/cockroachdb/9_alter_rules_rollouts_segments.up.sql\n+++ /dev/null\n@@ -1,15 +0,0 @@\n--- Rules\n-ALTER TABLE IF EXISTS rules DROP CONSTRAINT fk_namespace_key_ref_segments;\n-\n-ALTER TABLE IF EXISTS rules DROP COLUMN segment_key;\n-\n-ALTER TABLE IF EXISTS rules ADD COLUMN segment_operator INTEGER NOT NULL DEFAULT 0;\n-\n--- Rollouts\n-ALTER TABLE IF EXISTS rollout_segments DROP CONSTRAINT fk_namespace_key_ref_segments;\n-ALTER TABLE IF EXISTS rollout_segments DROP CONSTRAINT fk_namespace_key_ref_namespaces;\n-\n-ALTER TABLE IF EXISTS rollout_segments DROP COLUMN segment_key;\n-ALTER TABLE IF EXISTS rollout_segments DROP COLUMN namespace_key;\n-\n-ALTER TABLE IF EXISTS rollout_segments ADD COLUMN segment_operator INTEGER NOT NULL DEFAULT 0;\n\\ No newline at end of file\ndiff --git a/config/migrations/mysql/0_initial.up.sql b/config/migrations/mysql/0_initial.up.sql\ndeleted file mode 100644\nindex 380558b7..00000000\n--- a/config/migrations/mysql/0_initial.up.sql\n+++ /dev/null\n@@ -1,69 +0,0 @@\n-CREATE TABLE IF NOT EXISTS flags (\n-  `key` VARCHAR(255) UNIQUE NOT NULL,\n-  name VARCHAR(255) NOT NULL,\n-  description TEXT NOT NULL,\n-  enabled BOOLEAN DEFAULT FALSE NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL,\n-  PRIMARY KEY (`key`)\n-);\n-\n-CREATE TABLE IF NOT EXISTS segments (\n-  `key` VARCHAR(255) UNIQUE NOT NULL,\n-  name VARCHAR(255) NOT NULL,\n-  description TEXT NOT NULL,\n-  match_type INTEGER DEFAULT 0 NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL,\n-  PRIMARY KEY (`key`)\n-);\n-\n-CREATE TABLE IF NOT EXISTS variants (\n-  id VARCHAR(255) UNIQUE NOT NULL,\n-  flag_key VARCHAR(255) NOT NULL,\n-  `key` VARCHAR(255) NOT NULL,\n-  name VARCHAR(255) NOT NULL,\n-  description TEXT NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL,\n-  PRIMARY KEY (id),\n-  FOREIGN KEY (flag_key) REFERENCES flags (`key`) ON DELETE CASCADE,\n-  CONSTRAINT variants_flag_key_key UNIQUE (flag_key, `key`)\n-);\n-\n-CREATE TABLE IF NOT EXISTS constraints (\n-  id VARCHAR(255) UNIQUE NOT NULL,\n-  segment_key VARCHAR(255) NOT NULL,\n-  type INTEGER DEFAULT 0 NOT NULL,\n-  property VARCHAR(255) NOT NULL,\n-  operator VARCHAR(255) NOT NULL,\n-  value TEXT NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL,\n-  PRIMARY KEY (id),\n-  FOREIGN KEY (segment_key) REFERENCES segments (`key`) ON DELETE CASCADE\n-);\n-\n-CREATE TABLE IF NOT EXISTS rules (\n-  id VARCHAR(255) UNIQUE NOT NULL,\n-  flag_key VARCHAR(255) NOT NULL,\n-  segment_key VARCHAR(255) NOT NULL,\n-  `rank` INTEGER DEFAULT 1 NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL,\n-  PRIMARY KEY (id),\n-  FOREIGN KEY (flag_key) REFERENCES flags (`key`) ON DELETE CASCADE,\n-  FOREIGN KEY (segment_key) REFERENCES segments (`key`) ON DELETE CASCADE\n-);\n-\n-CREATE TABLE IF NOT EXISTS distributions (\n-  id VARCHAR(255) UNIQUE NOT NULL,\n-  rule_id VARCHAR(255) NOT NULL,\n-  variant_id VARCHAR(255) NOT NULL,\n-  rollout float DEFAULT 0 NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL,\n-  PRIMARY KEY (id),\n-  FOREIGN KEY (rule_id) REFERENCES rules (id) ON DELETE CASCADE,\n-  FOREIGN KEY (variant_id) REFERENCES variants (id) ON DELETE CASCADE\n-);\ndiff --git a/config/migrations/mysql/10_alter_rules_rollout_segments.up.sql b/config/migrations/mysql/10_alter_rules_rollout_segments.up.sql\ndeleted file mode 100644\nindex 55f30f3c..00000000\n--- a/config/migrations/mysql/10_alter_rules_rollout_segments.up.sql\n+++ /dev/null\n@@ -1,15 +0,0 @@\n--- Rules\n-ALTER TABLE rules DROP FOREIGN KEY `rules_ibfk_3`;\n-\n-ALTER TABLE rules DROP COLUMN segment_key;\n-\n-ALTER TABLE rules ADD COLUMN segment_operator INTEGER NOT NULL DEFAULT 0;\n-\n--- Rollouts\n-ALTER TABLE rollout_segments DROP FOREIGN KEY `rollout_segments_ibfk_1`;\n-ALTER TABLE rollout_segments DROP FOREIGN KEY `rollout_segments_ibfk_3`;\n-\n-ALTER TABLE rollout_segments DROP COLUMN segment_key;\n-ALTER TABLE rollout_segments DROP COLUMN namespace_key;\n-\n-ALTER TABLE rollout_segments ADD COLUMN segment_operator INTEGER NOT NULL DEFAULT 0;\n\\ No newline at end of file\ndiff --git a/config/migrations/mysql/11_change_timestamp_precision.up.sql b/config/migrations/mysql/11_change_timestamp_precision.up.sql\ndeleted file mode 100644\nindex 5bab0d35..00000000\n--- a/config/migrations/mysql/11_change_timestamp_precision.up.sql\n+++ /dev/null\n@@ -1,17 +0,0 @@\n-ALTER TABLE flags MODIFY created_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-ALTER TABLE flags MODIFY updated_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-\n-ALTER TABLE segments MODIFY created_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-ALTER TABLE segments MODIFY updated_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-\n-ALTER TABLE variants MODIFY created_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-ALTER TABLE variants MODIFY updated_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-\n-ALTER TABLE constraints MODIFY created_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-ALTER TABLE constraints MODIFY updated_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-\n-ALTER TABLE rules MODIFY created_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-ALTER TABLE rules MODIFY updated_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-\n-ALTER TABLE distributions MODIFY created_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-ALTER TABLE distributions MODIFY updated_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\ndiff --git a/config/migrations/mysql/12_namespaces_add_state_modified_at.up.sql b/config/migrations/mysql/12_namespaces_add_state_modified_at.up.sql\ndeleted file mode 100644\nindex 1d8bb696..00000000\n--- a/config/migrations/mysql/12_namespaces_add_state_modified_at.up.sql\n+++ /dev/null\n@@ -1 +0,0 @@\n-ALTER TABLE namespaces ADD COLUMN state_modified_at TIMESTAMP;\ndiff --git a/config/migrations/mysql/13_default_variant.up.sql b/config/migrations/mysql/13_default_variant.up.sql\ndeleted file mode 100644\nindex a99b2709..00000000\n--- a/config/migrations/mysql/13_default_variant.up.sql\n+++ /dev/null\n@@ -1 +0,0 @@\n-ALTER TABLE `flags` ADD COLUMN `default_variant_id` VARCHAR(255) REFERENCES variants(`id`) ON DELETE SET NULL;\n\\ No newline at end of file\ndiff --git a/config/migrations/mysql/14_flag_metadata.up.sql b/config/migrations/mysql/14_flag_metadata.up.sql\ndeleted file mode 100644\nindex 19661dc3..00000000\n--- a/config/migrations/mysql/14_flag_metadata.up.sql\n+++ /dev/null\n@@ -1 +0,0 @@\n-ALTER TABLE flags ADD COLUMN metadata JSON AFTER enabled;\ndiff --git a/config/migrations/mysql/1_variants_attachment.up.sql b/config/migrations/mysql/1_variants_attachment.up.sql\ndeleted file mode 100644\nindex 0dfdb9cb..00000000\n--- a/config/migrations/mysql/1_variants_attachment.up.sql\n+++ /dev/null\n@@ -1 +0,0 @@\n-ALTER TABLE variants ADD COLUMN attachment JSON AFTER description;\ndiff --git a/config/migrations/mysql/2_create_table_authentications.up.sql b/config/migrations/mysql/2_create_table_authentications.up.sql\ndeleted file mode 100644\nindex a1b3d50b..00000000\n--- a/config/migrations/mysql/2_create_table_authentications.up.sql\n+++ /dev/null\n@@ -1,12 +0,0 @@\n-CREATE TABLE IF NOT EXISTS authentications (\n-  id VARCHAR(255) UNIQUE NOT NULL,\n-  hashed_client_token VARCHAR(255) UNIQUE NOT NULL,\n-  method INTEGER DEFAULT 0 NOT NULL,\n-  metadata TEXT,\n-  expires_at TIMESTAMP(6),\n-  created_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL,\n-  updated_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL,\n-  PRIMARY KEY (`id`)\n-);\n-\n-CREATE UNIQUE INDEX hashed_client_token_authentications_index ON authentications (hashed_client_token);\ndiff --git a/config/migrations/mysql/3_create_table_operation_lock.up.sql b/config/migrations/mysql/3_create_table_operation_lock.up.sql\ndeleted file mode 100644\nindex 372fb611..00000000\n--- a/config/migrations/mysql/3_create_table_operation_lock.up.sql\n+++ /dev/null\n@@ -1,7 +0,0 @@\n-CREATE TABLE IF NOT EXISTS operation_lock (\n-  operation VARCHAR(255) UNIQUE NOT NULL,\n-  version INTEGER DEFAULT 0 NOT NULL,\n-  last_acquired_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6),\n-  acquired_until TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6),\n-  PRIMARY KEY (`operation`)\n-);\ndiff --git a/config/migrations/mysql/4_create_namespaces.up.sql b/config/migrations/mysql/4_create_namespaces.up.sql\ndeleted file mode 100644\nindex ac2455e3..00000000\n--- a/config/migrations/mysql/4_create_namespaces.up.sql\n+++ /dev/null\n@@ -1,12 +0,0 @@\n--- Create namespaces table\n-CREATE TABLE IF NOT EXISTS namespaces (\n-  `key` VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  name VARCHAR(255) NOT NULL,\n-  description TEXT NOT NULL,\n-  protected BOOLEAN DEFAULT FALSE NOT NULL,\n-  created_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL,\n-  updated_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL\n-);\n-\n--- Create default namespace\n-INSERT INTO namespaces (`key`, name, description, protected) VALUES ('default', 'Default', 'Default namespace', true);\n\\ No newline at end of file\ndiff --git a/config/migrations/mysql/5_namespaces_relationships.up.sql b/config/migrations/mysql/5_namespaces_relationships.up.sql\ndeleted file mode 100644\nindex 24c64d8d..00000000\n--- a/config/migrations/mysql/5_namespaces_relationships.up.sql\n+++ /dev/null\n@@ -1,81 +0,0 @@\n--- Drop previously created foreign key\n-ALTER TABLE constraints DROP FOREIGN KEY `constraints_ibfk_1`;\n-ALTER TABLE rules DROP FOREIGN KEY `rules_ibfk_1`;\n-ALTER TABLE rules DROP FOREIGN KEY `rules_ibfk_2`;\n-ALTER TABLE variants DROP FOREIGN KEY `variants_ibfk_1`;\n-\n--- Flags\n-\n--- Add column namespace_key with a default value\n-ALTER TABLE flags ADD COLUMN namespace_key VARCHAR(255) NOT NULL DEFAULT 'default';\n-\n--- Drop previously created unique index\n-ALTER TABLE flags DROP INDEX `key`, ADD INDEX `key` (`key`) USING BTREE;\n-\n--- Drop primary key constraint and add a new composite primary key on namespace_key and key columns\n-ALTER TABLE flags DROP PRIMARY KEY, ADD PRIMARY KEY (`namespace_key`, `key`);\n-\n--- Add foreign key constraint on namespace_key column referencing key column of namespaces table\n-ALTER TABLE flags ADD FOREIGN KEY (namespace_key) REFERENCES namespaces(`key`) ON DELETE CASCADE;\n-\n--- Variants\n-\n--- Add column namespace_key with a default value\n-ALTER TABLE variants ADD COLUMN namespace_key VARCHAR(255) NOT NULL DEFAULT 'default';\n-\n--- Drop previously created foreign key\n-\n--- Drop previously created unique index and add a new unique index on namespace_key, flag_key and key columns\n-ALTER TABLE variants DROP INDEX `variants_flag_key_key`, ADD UNIQUE INDEX `variants_namespace_flag_key` (`namespace_key`, `flag_key`, `key`) USING BTREE;\n-\n--- Add foreign key constraint on namespace_key column referencing key column of namespaces table\n-ALTER TABLE variants ADD FOREIGN KEY (namespace_key) REFERENCES namespaces(`key`) ON DELETE CASCADE;\n-\n--- Add foreign key constraint on namespace_key and flag_key columns referencing namespace_key and key columns of flags table\n-ALTER TABLE variants ADD FOREIGN KEY (namespace_key, flag_key) REFERENCES flags(`namespace_key`, `key`) ON DELETE CASCADE;\n-\n--- Segments\n-\n--- Drop previously created unique index and add a new unique index on namespace_key and key columns\n-ALTER TABLE segments DROP INDEX `key`, ADD INDEX `key` (`key`) USING BTREE;\n-\n--- Add column namespace_key with a default value\n-ALTER TABLE segments ADD COLUMN namespace_key VARCHAR(255) NOT NULL DEFAULT 'default';\n-\n--- Drop primary key constraint and add a new composite primary key on namespace_key and key columns\n-ALTER TABLE segments DROP PRIMARY KEY, ADD PRIMARY KEY (`namespace_key`, `key`);\n-\n--- Add foreign key constraint on namespace_key column referencing key column of namespaces table\n-ALTER TABLE segments ADD FOREIGN KEY (namespace_key) REFERENCES namespaces(`key`) ON DELETE CASCADE;\n-\n--- Constraints\n-\n--- Add column namespace_key with a default value\n-ALTER TABLE constraints ADD COLUMN namespace_key VARCHAR(255) NOT NULL DEFAULT 'default';\n-\n--- Drop previously created index and add a new index on namespace_key and segment_key columns\n-ALTER TABLE constraints DROP INDEX `segment_key`, ADD INDEX `constraints_namespace_segment_key` (`namespace_key`, `segment_key`) USING BTREE;\n-\n--- Add foreign key constraint on namespace_key column referencing key column of namespaces table\n-ALTER TABLE constraints ADD FOREIGN KEY (namespace_key) REFERENCES namespaces(`key`) ON DELETE CASCADE;\n-\n--- Add foreign key constraint on namespace_key and segment_key columns referencing namespace_key and key columns of segments table\n-ALTER TABLE constraints ADD FOREIGN KEY (namespace_key, segment_key) REFERENCES segments(`namespace_key`, `key`) ON DELETE CASCADE;\n-\n--- Rules\n-\n--- Add column namespace_key with a default value\n-ALTER TABLE rules ADD COLUMN namespace_key VARCHAR(255) NOT NULL DEFAULT 'default';\n-\n--- Drop previously created index and add a new index on namespace_key, flag_key and segment_key columns\n-ALTER TABLE rules DROP INDEX `flag_key`, ADD INDEX `rules_namespace_flag_key` (`namespace_key`, `flag_key`) USING BTREE;\n-ALTER TABLE rules DROP INDEX `segment_key`, ADD INDEX `rules_namespace_segment_key` (`namespace_key`, `segment_key`) USING BTREE;\n-\n--- Add foreign key constraint on namespace_key column referencing key column of namespaces table\n-ALTER TABLE rules ADD FOREIGN KEY (namespace_key) REFERENCES namespaces(`key`) ON DELETE CASCADE;\n-\n--- Add foreign key constraint on namespace_key and flag_key columns referencing namespace_key and key columns of flags table\n-ALTER TABLE rules ADD FOREIGN KEY (namespace_key, flag_key) REFERENCES flags(`namespace_key`, `key`) ON DELETE CASCADE;\n-\n--- Add foreign key constraint on namespace_key and segment_key columns referencing namespace_key and key columns of segments table\n-ALTER TABLE rules ADD FOREIGN KEY (namespace_key, segment_key) REFERENCES segments(`namespace_key`, `key`) ON DELETE CASCADE;\ndiff --git a/config/migrations/mysql/6_constraints_with_description.up.sql b/config/migrations/mysql/6_constraints_with_description.up.sql\ndeleted file mode 100644\nindex 4b77d4c5..00000000\n--- a/config/migrations/mysql/6_constraints_with_description.up.sql\n+++ /dev/null\n@@ -1,2 +0,0 @@\n--- Add description column to constraints\n-ALTER TABLE constraints ADD COLUMN description TEXT;\n\\ No newline at end of file\ndiff --git a/config/migrations/mysql/7_flag_type.up.sql b/config/migrations/mysql/7_flag_type.up.sql\ndeleted file mode 100644\nindex 969aa28f..00000000\n--- a/config/migrations/mysql/7_flag_type.up.sql\n+++ /dev/null\n@@ -1 +0,0 @@\n-ALTER TABLE flags ADD COLUMN `type` INTEGER DEFAULT 0 NOT NULL;\n\\ No newline at end of file\ndiff --git a/config/migrations/mysql/8_rollouts.up.sql b/config/migrations/mysql/8_rollouts.up.sql\ndeleted file mode 100644\nindex 1a3cf202..00000000\n--- a/config/migrations/mysql/8_rollouts.up.sql\n+++ /dev/null\n@@ -1,36 +0,0 @@\n-CREATE TABLE IF NOT EXISTS rollouts (\n-  id VARCHAR(255) UNIQUE NOT NULL,\n-  namespace_key VARCHAR(255) NOT NULL,\n-  flag_key VARCHAR(255) NOT NULL,\n-  type INTEGER DEFAULT 0 NOT NULL,\n-  description TEXT NOT NULL,\n-  `rank` INTEGER DEFAULT 1 NOT NULL,\n-  created_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL,\n-  updated_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL,\n-  PRIMARY KEY (id),\n-  FOREIGN KEY (namespace_key) REFERENCES namespaces (`key`) ON DELETE CASCADE,\n-  FOREIGN KEY (namespace_key, flag_key) REFERENCES flags (namespace_key, `key`) ON DELETE CASCADE\n-);\n-\n-CREATE TABLE IF NOT EXISTS rollout_thresholds (\n-  id VARCHAR(255) UNIQUE NOT NULL,\n-  namespace_key VARCHAR(255) NOT NULL,\n-  rollout_id VARCHAR(255) UNIQUE NOT NULL,\n-  percentage float DEFAULT 0 NOT NULL,\n-  value BOOLEAN DEFAULT FALSE NOT NULL,\n-  PRIMARY KEY (id),\n-  FOREIGN KEY (namespace_key) REFERENCES namespaces (`key`) ON DELETE CASCADE,\n-  FOREIGN KEY (rollout_id) REFERENCES rollouts (id) ON DELETE CASCADE\n-);\n-\n-CREATE TABLE IF NOT EXISTS rollout_segments (\n-  id VARCHAR(255) UNIQUE NOT NULL,\n-  namespace_key VARCHAR(255) NOT NULL,\n-  rollout_id VARCHAR(255) NOT NULL,\n-  segment_key VARCHAR(255) NOT NULL,\n-  value BOOLEAN DEFAULT FALSE NOT NULL,\n-  PRIMARY KEY (id),\n-  FOREIGN KEY (namespace_key) REFERENCES namespaces (`key`) ON DELETE CASCADE,\n-  FOREIGN KEY (rollout_id) REFERENCES rollouts (id) ON DELETE CASCADE,\n-  FOREIGN KEY (namespace_key, segment_key) REFERENCES segments (namespace_key, `key`) ON DELETE CASCADE\n-);\ndiff --git a/config/migrations/mysql/9_segment_anding_tables.up.sql b/config/migrations/mysql/9_segment_anding_tables.up.sql\ndeleted file mode 100644\nindex 5eb77470..00000000\n--- a/config/migrations/mysql/9_segment_anding_tables.up.sql\n+++ /dev/null\n@@ -1,23 +0,0 @@\n--- Rules\n-CREATE TABLE IF NOT EXISTS rule_segments (\n-  rule_id VARCHAR(255) NOT NULL,\n-  namespace_key VARCHAR(255) NOT NULL,\n-  segment_key VARCHAR(255) NOT NULL,\n-  CONSTRAINT rule_id_namespace_segment UNIQUE (rule_id, namespace_key, segment_key),\n-  FOREIGN KEY (rule_id) REFERENCES rules (id) ON DELETE CASCADE,\n-  FOREIGN KEY (namespace_key, segment_key) REFERENCES segments (namespace_key, `key`) ON DELETE CASCADE\n-);\n-\n-INSERT INTO rule_segments (rule_id, namespace_key, segment_key) SELECT id AS rule_id, namespace_key, segment_key FROM rules;\n-\n--- Rollouts\n-CREATE TABLE IF NOT EXISTS rollout_segment_references (\n-  rollout_segment_id VARCHAR(255) NOT NULL,\n-  namespace_key VARCHAR(255) NOT NULL,\n-  segment_key VARCHAR(255) NOT NULL,\n-  CONSTRAINT rollout_segment_id_namespace_segment UNIQUE (rollout_segment_id, namespace_key, segment_key),\n-  FOREIGN KEY (rollout_segment_id) REFERENCES rollout_segments (id) ON DELETE CASCADE,\n-  FOREIGN KEY (namespace_key, segment_key) REFERENCES segments (namespace_key, `key`) ON DELETE CASCADE\n-);\n-\n-INSERT INTO rollout_segment_references (rollout_segment_id, namespace_key, segment_key) SELECT id AS rollout_segment_id, namespace_key, segment_key FROM rollout_segments;\n\\ No newline at end of file\ndiff --git a/internal/cmd/grpc.go b/internal/cmd/grpc.go\nindex 5a62452c..58a8715a 100644\n--- a/internal/cmd/grpc.go\n+++ b/internal/cmd/grpc.go\n@@ -46,7 +46,6 @@ import (\n \tstoragecache \"go.flipt.io/flipt/internal/storage/cache\"\n \tfsstore \"go.flipt.io/flipt/internal/storage/fs/store\"\n \tfliptsql \"go.flipt.io/flipt/internal/storage/sql\"\n-\t\"go.flipt.io/flipt/internal/storage/sql/mysql\"\n \t\"go.flipt.io/flipt/internal/storage/sql/postgres\"\n \t\"go.flipt.io/flipt/internal/storage/sql/sqlite\"\n \t\"go.flipt.io/flipt/internal/tracing\"\n@@ -142,10 +141,8 @@ func NewGRPCServer(\n \t\tswitch driver {\n \t\tcase fliptsql.SQLite, fliptsql.LibSQL:\n \t\t\tstore = sqlite.NewStore(db, builder, logger)\n-\t\tcase fliptsql.Postgres, fliptsql.CockroachDB:\n+\t\tcase fliptsql.Postgres:\n \t\t\tstore = postgres.NewStore(db, builder, logger)\n-\t\tcase fliptsql.MySQL:\n-\t\t\tstore = mysql.NewStore(db, builder, logger)\n \t\tdefault:\n \t\t\treturn nil, fmt.Errorf(\"unsupported driver: %s\", driver)\n \t\t}\n@@ -260,7 +257,7 @@ func NewGRPCServer(\n \t\tevalsrv     = evaluation.New(logger, store)\n \t\tevaldatasrv = evaluationdata.New(logger, store)\n \t\thealthsrv   = health.NewServer()\n-\t\tofrepsrv    = ofrep.New(cfg.Cache)\n+\t\tofrepsrv    = ofrep.New(logger, cfg.Cache, evalsrv)\n \t)\n \n \tvar (\ndiff --git a/internal/config/database.go b/internal/config/database.go\nindex 21612822..0d86d5cb 100644\n--- a/internal/config/database.go\n+++ b/internal/config/database.go\n@@ -15,23 +15,15 @@ var (\n )\n \n const (\n-\t// database protocol enum\n \t_ DatabaseProtocol = iota\n-\t// DatabaseSQLite ...\n \tDatabaseSQLite\n-\t// DatabasePostgres ...\n \tDatabasePostgres\n-\t// DatabaseMySQL ...\n-\tDatabaseMySQL\n-\t// DatabaseCockroachDB ...\n-\tDatabaseCockroachDB\n-\t// DatabaseLibSQL ...\n \tDatabaseLibSQL\n )\n \n // DatabaseConfig contains fields, which configure the various relational database backends.\n //\n-// Flipt currently supports SQLite, Postgres and MySQL backends.\n+// Flipt currently supports SQLite and Postgres backends.\n type DatabaseConfig struct {\n \tURL                       string           `json:\"url,omitempty\" mapstructure:\"url,omitempty\" yaml:\"url,omitempty\"`\n \tMaxIdleConn               int              `json:\"maxIdleConn,omitempty\" mapstructure:\"max_idle_conn\" yaml:\"max_idle_conn,omitempty\"`\n@@ -103,20 +95,15 @@ func (d DatabaseProtocol) MarshalJSON() ([]byte, error) {\n \n var (\n \tdatabaseProtocolToString = map[DatabaseProtocol]string{\n-\t\tDatabaseSQLite:      \"sqlite\",\n-\t\tDatabaseLibSQL:      \"libsql\",\n-\t\tDatabasePostgres:    \"postgres\",\n-\t\tDatabaseMySQL:       \"mysql\",\n-\t\tDatabaseCockroachDB: \"cockroachdb\",\n+\t\tDatabaseSQLite:   \"sqlite\",\n+\t\tDatabaseLibSQL:   \"libsql\",\n+\t\tDatabasePostgres: \"postgres\",\n \t}\n \n \tstringToDatabaseProtocol = map[string]DatabaseProtocol{\n-\t\t\"file\":        DatabaseSQLite,\n-\t\t\"sqlite\":      DatabaseSQLite,\n-\t\t\"libsql\":      DatabaseLibSQL,\n-\t\t\"postgres\":    DatabasePostgres,\n-\t\t\"mysql\":       DatabaseMySQL,\n-\t\t\"cockroachdb\": DatabaseCockroachDB,\n-\t\t\"cockroach\":   DatabaseCockroachDB,\n+\t\t\"file\":     DatabaseSQLite,\n+\t\t\"sqlite\":   DatabaseSQLite,\n+\t\t\"libsql\":   DatabaseLibSQL,\n+\t\t\"postgres\": DatabasePostgres,\n \t}\n )\ndiff --git a/internal/server/evaluation/ofrep_bridge.go b/internal/server/evaluation/ofrep_bridge.go\nnew file mode 100644\nindex 00000000..7201eef7\n--- /dev/null\n+++ b/internal/server/evaluation/ofrep_bridge.go\n@@ -0,0 +1,72 @@\n+package evaluation\n+\n+import (\n+\t\"context\"\n+\t\"fmt\"\n+\t\"strconv\"\n+\n+\t\"go.flipt.io/flipt/internal/server/ofrep\"\n+\t\"go.flipt.io/flipt/internal/storage\"\n+\t\"go.flipt.io/flipt/rpc/flipt\"\n+\trpcevaluation \"go.flipt.io/flipt/rpc/flipt/evaluation\"\n+)\n+\n+func (s *Server) OFREPEvaluationBridge(ctx context.Context, input ofrep.EvaluationBridgeInput) (ofrep.EvaluationBridgeOutput, error) {\n+\tflag, err := s.store.GetFlag(ctx, storage.NewResource(input.NamespaceKey, input.FlagKey))\n+\tif err != nil {\n+\t\treturn ofrep.EvaluationBridgeOutput{}, err\n+\t}\n+\n+\tentityID := \"\"\n+\tif input.Context != nil {\n+\t\tif v, ok := input.Context[\"targetingKey\"]; ok {\n+\t\t\tentityID = v\n+\t\t}\n+\t}\n+\n+\treq := &amp;rpcevaluation.EvaluationRequest{\n+\t\tNamespaceKey: input.NamespaceKey,\n+\t\tFlagKey:      input.FlagKey,\n+\t\tEntityId:     entityID,\n+\t\tContext:      input.Context,\n+\t}\n+\n+\tswitch flag.Type {\n+\tcase flipt.FlagType_BOOLEAN_FLAG_TYPE:\n+\t\tresp, err := s.boolean(ctx, flag, req)\n+\t\tif err != nil {\n+\t\t\treturn ofrep.EvaluationBridgeOutput{}, err\n+\t\t}\n+\t\treturn ofrep.EvaluationBridgeOutput{\n+\t\t\tFlagKey: flag.Key,\n+\t\t\tReason:  resp.Reason,\n+\t\t\tVariant: strconv.FormatBool(resp.Enabled),\n+\t\t\tValue:   resp.Enabled,\n+\t\t}, nil\n+\tcase flipt.FlagType_VARIANT_FLAG_TYPE:\n+\t\tresp, err := s.evaluator.Evaluate(ctx, flag, req)\n+\t\tif err != nil {\n+\t\t\treturn ofrep.EvaluationBridgeOutput{}, err\n+\t\t}\n+\t\tvar reason rpcevaluation.EvaluationReason\n+\t\tswitch resp.Reason {\n+\t\tcase flipt.EvaluationReason_MATCH_EVALUATION_REASON:\n+\t\t\treason = rpcevaluation.EvaluationReason_MATCH_EVALUATION_REASON\n+\t\tcase flipt.EvaluationReason_FLAG_DISABLED_EVALUATION_REASON:\n+\t\t\treason = rpcevaluation.EvaluationReason_FLAG_DISABLED_EVALUATION_REASON\n+\t\tcase flipt.EvaluationReason_DEFAULT_EVALUATION_REASON:\n+\t\t\treason = rpcevaluation.EvaluationReason_DEFAULT_EVALUATION_REASON\n+\t\tdefault:\n+\t\t\treason = rpcevaluation.EvaluationReason_UNKNOWN_EVALUATION_REASON\n+\t\t}\n+\t\tvariant := resp.Value\n+\t\treturn ofrep.EvaluationBridgeOutput{\n+\t\t\tFlagKey: flag.Key,\n+\t\t\tReason:  reason,\n+\t\t\tVariant: variant,\n+\t\t\tValue:   variant,\n+\t\t}, nil\n+\tdefault:\n+\t\treturn ofrep.EvaluationBridgeOutput{}, fmt.Errorf(\"unsupported flag type %s\", flag.Type)\n+\t}\n+}\ndiff --git a/internal/server/ofrep/errors.go b/internal/server/ofrep/errors.go\nnew file mode 100644\nindex 00000000..dbf855e5\n--- /dev/null\n+++ b/internal/server/ofrep/errors.go\n@@ -0,0 +1,33 @@\n+package ofrep\n+\n+import (\n+\t\"fmt\"\n+\n+\t\"google.golang.org/grpc/codes\"\n+\t\"google.golang.org/grpc/status\"\n+)\n+\n+func NewTargetingKeyMissing() error {\n+\treturn status.Error(codes.InvalidArgument, \"flag key is required\")\n+}\n+\n+func NewBadRequestError(key string, err error) error {\n+\tif err != nil {\n+\t\treturn status.Errorf(codes.InvalidArgument, \"invalid request for flag %s: %v\", key, err)\n+\t}\n+\treturn status.Errorf(codes.InvalidArgument, \"invalid request for flag %s\", key)\n+}\n+\n+func NewFlagNotFoundError(key string) error {\n+\treturn status.Errorf(codes.NotFound, \"flag %q not found\", key)\n+}\n+\n+func NewUnauthenticatedError() error {\n+\treturn status.Error(codes.Unauthenticated, \"unauthenticated\")\n+}\n+\n+func NewUnauthorizedError() error {\n+\treturn status.Errorf(codes.PermissionDenied, \"unauthorized\")\n+}\n+\n+var _ = fmt.Sprintf\ndiff --git a/internal/server/ofrep/server.go b/internal/server/ofrep/server.go\nindex 78c69fb4..d0156d1c 100644\n--- a/internal/server/ofrep/server.go\n+++ b/internal/server/ofrep/server.go\n@@ -1,27 +1,137 @@\n package ofrep\n \n import (\n-\t\"go.flipt.io/flipt/internal/config\"\n+\t\"context\"\n \n+\t\"go.flipt.io/flipt/internal/config\"\n+\trpcevaluation \"go.flipt.io/flipt/rpc/flipt/evaluation\"\n \t\"go.flipt.io/flipt/rpc/flipt/ofrep\"\n+\t\"go.uber.org/zap\"\n \t\"google.golang.org/grpc\"\n+\t\"google.golang.org/grpc/metadata\"\n+\t\"google.golang.org/protobuf/types/known/structpb\"\n+\n+\tflipterrors \"go.flipt.io/flipt/errors\"\n )\n \n-// Server servers the methods used by the OpenFeature Remote Evaluation Protocol.\n-// It will be used only with gRPC Gateway as there's no specification for gRPC itself.\n+type EvaluationBridgeInput struct {\n+\tFlagKey      string\n+\tNamespaceKey string\n+\tContext      map[string]string\n+}\n+\n+type EvaluationBridgeOutput struct {\n+\tFlagKey string\n+\tReason  rpcevaluation.EvaluationReason\n+\tVariant string\n+\tValue   any\n+}\n+\n+type Bridge interface {\n+\tOFREPEvaluationBridge(ctx context.Context, input EvaluationBridgeInput) (EvaluationBridgeOutput, error)\n+}\n+\n type Server struct {\n+\tlogger   *zap.Logger\n \tcacheCfg config.CacheConfig\n+\tbridge   Bridge\n \tofrep.UnimplementedOFREPServiceServer\n }\n \n-// New constructs a new Server.\n-func New(cacheCfg config.CacheConfig) *Server {\n+func New(logger *zap.Logger, cacheCfg config.CacheConfig, bridge Bridge) *Server {\n \treturn &amp;Server{\n+\t\tlogger:   logger,\n \t\tcacheCfg: cacheCfg,\n+\t\tbridge:   bridge,\n \t}\n }\n \n-// RegisterGRPC registers the EvaluateServer onto the provided gRPC Server.\n func (s *Server) RegisterGRPC(server *grpc.Server) {\n \tofrep.RegisterOFREPServiceServer(server, s)\n }\n+\n+func (s *Server) EvaluateFlag(ctx context.Context, r *ofrep.EvaluateFlagRequest) (*ofrep.EvaluatedFlag, error) {\n+\ts.logger.Info(\"evaluate flag\", zap.Any(\"request\", r))\n+\n+\tif r.Key == \"\" {\n+\t\treturn nil, NewTargetingKeyMissing()\n+\t}\n+\n+\tns := \"default\"\n+\tif md, ok := metadata.FromIncomingContext(ctx); ok {\n+\t\tif vals := md.Get(\"x-flipt-namespace\"); len(vals) &gt; 0 &amp;&amp; vals[0] != \"\" {\n+\t\t\tns = vals[0]\n+\t\t}\n+\t}\n+\n+\tinput := EvaluationBridgeInput{\n+\t\tFlagKey:      r.Key,\n+\t\tNamespaceKey: ns,\n+\t\tContext:      r.Context,\n+\t}\n+\n+\toutput, err := s.bridge.OFREPEvaluationBridge(ctx, input)\n+\tif err != nil {\n+\t\tif flipterrors.AsMatch[flipterrors.ErrInvalid](err) {\n+\t\t\treturn nil, NewBadRequestError(r.Key, err)\n+\t\t}\n+\t\tif _, ok := flipterrors.As[flipterrors.ErrValidation](err); ok {\n+\t\t\treturn nil, NewBadRequestError(r.Key, err)\n+\t\t}\n+\t\tif flipterrors.AsMatch[flipterrors.ErrNotFound](err) {\n+\t\t\treturn nil, NewFlagNotFoundError(r.Key)\n+\t\t}\n+\t\tif flipterrors.AsMatch[flipterrors.ErrUnauthenticated](err) {\n+\t\t\treturn nil, NewUnauthenticatedError()\n+\t\t}\n+\t\tif flipterrors.AsMatch[flipterrors.ErrUnauthorized](err) {\n+\t\t\treturn nil, NewUnauthorizedError()\n+\t\t}\n+\t\treturn nil, err\n+\t}\n+\n+\tvar reason ofrep.EvaluateReason\n+\tswitch output.Reason {\n+\tcase rpcevaluation.EvaluationReason_FLAG_DISABLED_EVALUATION_REASON:\n+\t\treason = ofrep.EvaluateReason_DISABLED\n+\tcase rpcevaluation.EvaluationReason_MATCH_EVALUATION_REASON:\n+\t\treason = ofrep.EvaluateReason_TARGETING_MATCH\n+\tcase rpcevaluation.EvaluationReason_DEFAULT_EVALUATION_REASON:\n+\t\treason = ofrep.EvaluateReason_DEFAULT\n+\tdefault:\n+\t\treason = ofrep.EvaluateReason_DEFAULT\n+\t}\n+\n+\tvar val *structpb.Value\n+\tswitch v := output.Value.(type) {\n+\tcase bool:\n+\t\tval = structpb.NewBoolValue(v)\n+\tcase string:\n+\t\tval = structpb.NewStringValue(v)\n+\tdefault:\n+\t\tif output.Value == nil {\n+\t\t\tval = structpb.NewStringValue(\"\")\n+\t\t} else {\n+\t\t\tif b, ok := output.Value.(bool); ok {\n+\t\t\t\tval = structpb.NewBoolValue(b)\n+\t\t\t} else if s, ok := output.Value.(string); ok {\n+\t\t\t\tval = structpb.NewStringValue(s)\n+\t\t\t} else {\n+\t\t\t\tval = structpb.NewStringValue(\"\")\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\tmetadataStruct := &amp;structpb.Struct{Fields: map[string]*structpb.Value{}}\n+\tif metadataStruct.Fields == nil {\n+\t\tmetadataStruct.Fields = make(map[string]*structpb.Value)\n+\t}\n+\n+\treturn &amp;ofrep.EvaluatedFlag{\n+\t\tKey:      output.FlagKey,\n+\t\tReason:   reason,\n+\t\tVariant:  output.Variant,\n+\t\tMetadata: metadataStruct,\n+\t\tValue:    val,\n+\t}, nil\n+}\ndiff --git a/internal/storage/sql/db.go b/internal/storage/sql/db.go\nindex 7c00f313..2754ba9a 100644\n--- a/internal/storage/sql/db.go\n+++ b/internal/storage/sql/db.go\n@@ -11,7 +11,6 @@ import (\n \t\"github.com/ClickHouse/clickhouse-go/v2\"\n \tsq \"github.com/Masterminds/squirrel\"\n \t\"github.com/XSAM/otelsql\"\n-\t\"github.com/go-sql-driver/mysql\"\n \n \t\"github.com/libsql/libsql-client-go/libsql\"\n \t\"github.com/mattn/go-sqlite3\"\n@@ -83,7 +82,7 @@ func BuilderFor(db *sql.DB, driver Driver, preparedStatementsEnabled bool) sq.St\n \t}\n \n \tbuilder := sq.StatementBuilder.RunWith(brdb)\n-\tif driver == Postgres || driver == CockroachDB {\n+\tif driver == Postgres {\n \t\tbuilder = builder.PlaceholderFormat(sq.Dollar)\n \t}\n \n@@ -128,12 +127,6 @@ func open(cfg config.Config, opts Options) (*sql.DB, Driver, error) {\n \tcase Postgres:\n \t\tdr = newAdaptedPostgresDriver(d)\n \t\tattrs = []attribute.KeyValue{semconv.DBSystemPostgreSQL}\n-\tcase CockroachDB:\n-\t\tdr = newAdaptedPostgresDriver(d)\n-\t\tattrs = []attribute.KeyValue{semconv.DBSystemCockroachdb}\n-\tcase MySQL:\n-\t\tdr = &amp;mysql.MySQLDriver{}\n-\t\tattrs = []attribute.KeyValue{semconv.DBSystemMySQL}\n \t}\n \n \tregistered := false\n@@ -195,21 +188,17 @@ func openAnalytics(cfg config.Config) (*sql.DB, Driver, error) {\n \n var (\n \tdriverToString = map[Driver]string{\n-\t\tSQLite:      \"sqlite3\",\n-\t\tLibSQL:      \"libsql\",\n-\t\tPostgres:    \"postgres\",\n-\t\tMySQL:       \"mysql\",\n-\t\tCockroachDB: \"cockroachdb\",\n-\t\tClickhouse:  \"clickhouse\",\n+\t\tSQLite:     \"sqlite3\",\n+\t\tLibSQL:     \"libsql\",\n+\t\tPostgres:   \"postgres\",\n+\t\tClickhouse: \"clickhouse\",\n \t}\n \n \tstringToDriver = map[string]Driver{\n-\t\t\"sqlite3\":     SQLite,\n-\t\t\"libsql\":      LibSQL,\n-\t\t\"pgx\":         Postgres,\n-\t\t\"mysql\":       MySQL,\n-\t\t\"cockroachdb\": CockroachDB,\n-\t\t\"clickhouse\":  Clickhouse,\n+\t\t\"sqlite3\":    SQLite,\n+\t\t\"libsql\":     LibSQL,\n+\t\t\"pgx\":        Postgres,\n+\t\t\"clickhouse\": Clickhouse,\n \t}\n )\n \n@@ -233,10 +222,6 @@ const (\n \tSQLite\n \t// Postgres ...\n \tPostgres\n-\t// MySQL ...\n-\tMySQL\n-\t// CockroachDB ...\n-\tCockroachDB\n \t// LibSQL ...\n \tLibSQL\n \t// Clickhouse ...\n@@ -282,7 +267,7 @@ func parse(cfg config.Config, opts Options) (Driver, *dburl.URL, error) {\n \n \tv := url.Query()\n \tswitch driver {\n-\tcase Postgres, CockroachDB:\n+\tcase Postgres:\n \t\tif opts.sslDisabled {\n \t\t\tv.Set(\"sslmode\", \"disable\")\n \t\t}\n@@ -291,12 +276,6 @@ func parse(cfg config.Config, opts Options) (Driver, *dburl.URL, error) {\n \t\tif !cfg.Database.PreparedStatementsEnabled {\n \t\t\tv.Set(\"binary_parameters\", \"yes\")\n \t\t}\n-\tcase MySQL:\n-\t\tv.Set(\"multiStatements\", \"true\")\n-\t\tv.Set(\"parseTime\", \"true\")\n-\t\tif !opts.migrate {\n-\t\t\tv.Set(\"sql_mode\", \"ANSI\")\n-\t\t}\n \tcase SQLite, LibSQL:\n \t\tif url.Scheme != \"http\" &amp;&amp; url.Scheme != \"https\" {\n \t\t\tv.Set(\"cache\", \"shared\")\ndiff --git a/internal/storage/sql/errors.go b/internal/storage/sql/errors.go\nindex 049af97a..aa2e5629 100644\n--- a/internal/storage/sql/errors.go\n+++ b/internal/storage/sql/errors.go\n@@ -4,7 +4,6 @@ import (\n \t\"database/sql\"\n \t\"errors\"\n \n-\t\"github.com/go-sql-driver/mysql\"\n \t\"github.com/jackc/pgx/v5/pgconn\"\n \t\"github.com/mattn/go-sqlite3\"\n \terrs \"go.flipt.io/flipt/errors\"\n@@ -19,7 +18,6 @@ var (\n \terrConnectionFailed   = errs.ErrCanceled(\"failed to connect to database\")\n )\n \n-// AdaptError converts specific known-driver errors into wrapped storage errors.\n func (d Driver) AdaptError(err error) error {\n \tif err == nil {\n \t\treturn nil\n@@ -32,10 +30,8 @@ func (d Driver) AdaptError(err error) error {\n \tswitch d {\n \tcase SQLite, LibSQL:\n \t\treturn adaptSQLiteError(err)\n-\tcase CockroachDB, Postgres:\n+\tcase Postgres:\n \t\treturn adaptPostgresError(err)\n-\tcase MySQL:\n-\t\treturn adaptMySQLError(err)\n \t}\n \n \treturn err\n@@ -62,9 +58,9 @@ func adaptSQLiteError(err error) error {\n \n func adaptPostgresError(err error) error {\n \tconst (\n-\t\tconstraintForeignKeyErr = \"23503\" // \"foreign_key_violation\"\n-\t\tconstraintUniqueErr     = \"23505\" // \"unique_violation\"\n-\t\tqueryCanceled           = \"57014\" // \"query_canceled\"\n+\t\tconstraintForeignKeyErr = \"23503\"\n+\t\tconstraintUniqueErr     = \"23505\"\n+\t\tqueryCanceled           = \"57014\"\n \t)\n \n \tvar perr *pgconn.PgError\n@@ -87,23 +83,3 @@ func adaptPostgresError(err error) error {\n \n \treturn err\n }\n-\n-func adaptMySQLError(err error) error {\n-\tconst (\n-\t\tconstraintForeignKeyErrCode uint16 = 1452\n-\t\tconstraintUniqueErrCode     uint16 = 1062\n-\t)\n-\n-\tvar merr *mysql.MySQLError\n-\n-\tif errors.As(err, &amp;merr) {\n-\t\tswitch merr.Number {\n-\t\tcase constraintForeignKeyErrCode:\n-\t\t\treturn errForeignKeyNotFound\n-\t\tcase constraintUniqueErrCode:\n-\t\t\treturn errNotUnique\n-\t\t}\n-\t}\n-\n-\treturn err\n-}\ndiff --git a/internal/storage/sql/migrator.go b/internal/storage/sql/migrator.go\nindex dc973154..63a0a2b0 100644\n--- a/internal/storage/sql/migrator.go\n+++ b/internal/storage/sql/migrator.go\n@@ -8,8 +8,6 @@ import (\n \t\"github.com/golang-migrate/migrate/v4\"\n \t\"github.com/golang-migrate/migrate/v4/database\"\n \tclickhouseMigrate \"github.com/golang-migrate/migrate/v4/database/clickhouse\"\n-\t\"github.com/golang-migrate/migrate/v4/database/cockroachdb\"\n-\t\"github.com/golang-migrate/migrate/v4/database/mysql\"\n \t\"github.com/golang-migrate/migrate/v4/database/pgx/v5\"\n \t\"github.com/golang-migrate/migrate/v4/database/sqlite3\"\n \t\"github.com/golang-migrate/migrate/v4/source/iofs\"\n@@ -19,12 +17,10 @@ import (\n )\n \n var expectedVersions = map[Driver]uint{\n-\tSQLite:      14,\n-\tLibSQL:      14, // libsql driver uses the same migrations as sqlite3\n-\tPostgres:    15,\n-\tMySQL:       14,\n-\tCockroachDB: 12,\n-\tClickhouse:  3,\n+\tSQLite:     14,\n+\tLibSQL:     14,\n+\tPostgres:   15,\n+\tClickhouse: 3,\n }\n \n // Migrator is responsible for migrating the database schema\n@@ -49,10 +45,6 @@ func NewMigrator(cfg config.Config, logger *zap.Logger) (*Migrator, error) {\n \t\tdr, err = sqlite3.WithInstance(sql, &amp;sqlite3.Config{})\n \tcase Postgres:\n \t\tdr, err = pgx.WithInstance(sql, &amp;pgx.Config{})\n-\tcase CockroachDB:\n-\t\tdr, err = cockroachdb.WithInstance(sql, &amp;cockroachdb.Config{})\n-\tcase MySQL:\n-\t\tdr, err = mysql.WithInstance(sql, &amp;mysql.Config{})\n \t}\n \n \tif err != nil {\n@@ -170,14 +162,7 @@ func (m *Migrator) Drop() error {\n \n \tswitch m.driver {\n \tcase SQLite:\n-\t\t// disable foreign keys for sqlite to avoid errors when dropping tables\n-\t\t// https://www.sqlite.org/foreignkeys.html#fk_enable\n-\t\t// we dont need to worry about re-enabling them since we're dropping the db\n-\t\t// and the connection will be closed\n \t\t_, _ = m.db.Exec(\"PRAGMA foreign_keys = OFF\")\n-\tcase MySQL:\n-\t\t// https://stackoverflow.com/questions/5452760/how-to-truncate-a-foreign-key-constrained-table\n-\t\t_, _ = m.db.Exec(\"SET FOREIGN_KEY_CHECKS = 0;\")\n \t}\n \n \tif err := m.migrator.Drop(); err != nil {\ndiff --git a/internal/storage/sql/mysql/mysql.go b/internal/storage/sql/mysql/mysql.go\ndeleted file mode 100644\nindex c413d199..00000000\n--- a/internal/storage/sql/mysql/mysql.go\n+++ /dev/null\n@@ -1,235 +0,0 @@\n-package mysql\n-\n-import (\n-\t\"context\"\n-\t\"database/sql\"\n-\n-\t\"errors\"\n-\n-\tsq \"github.com/Masterminds/squirrel\"\n-\t\"github.com/go-sql-driver/mysql\"\n-\terrs \"go.flipt.io/flipt/errors\"\n-\t\"go.flipt.io/flipt/internal/storage\"\n-\t\"go.flipt.io/flipt/internal/storage/sql/common\"\n-\tflipt \"go.flipt.io/flipt/rpc/flipt\"\n-\t\"go.uber.org/zap\"\n-)\n-\n-const (\n-\tconstraintForeignKeyErr uint16 = 1452\n-\tconstraintUniqueErr     uint16 = 1062\n-)\n-\n-var _ storage.Store = &amp;Store{}\n-\n-func NewStore(db *sql.DB, builder sq.StatementBuilderType, logger *zap.Logger) *Store {\n-\treturn &amp;Store{\n-\t\tStore: common.NewStore(db, builder, logger),\n-\t}\n-}\n-\n-type Store struct {\n-\t*common.Store\n-}\n-\n-func (s *Store) String() string {\n-\treturn \"mysql\"\n-}\n-\n-func (s *Store) CreateNamespace(ctx context.Context, r *flipt.CreateNamespaceRequest) (*flipt.Namespace, error) {\n-\tnamespace, err := s.Store.CreateNamespace(ctx, r)\n-\n-\tif err != nil {\n-\t\tvar merr *mysql.MySQLError\n-\n-\t\tif errors.As(err, &amp;merr) &amp;&amp; merr.Number == constraintUniqueErr {\n-\t\t\treturn nil, errs.ErrInvalidf(\"namespace %q is not unique\", r.Key)\n-\t\t}\n-\n-\t\treturn nil, err\n-\t}\n-\n-\treturn namespace, nil\n-}\n-\n-func (s *Store) CreateFlag(ctx context.Context, r *flipt.CreateFlagRequest) (*flipt.Flag, error) {\n-\tflag, err := s.Store.CreateFlag(ctx, r)\n-\n-\tif err != nil {\n-\t\tvar merr *mysql.MySQLError\n-\n-\t\tif errors.As(err, &amp;merr) {\n-\t\t\tswitch merr.Number {\n-\t\t\tcase constraintForeignKeyErr:\n-\t\t\t\treturn nil, errs.ErrNotFoundf(\"namespace %q\", r.NamespaceKey)\n-\t\t\tcase constraintUniqueErr:\n-\t\t\t\treturn nil, errs.ErrInvalidf(`flag \"%s/%s\" is not unique`, r.NamespaceKey, r.Key)\n-\t\t\t}\n-\t\t}\n-\n-\t\treturn nil, err\n-\t}\n-\n-\treturn flag, nil\n-}\n-\n-func (s *Store) UpdateFlag(ctx context.Context, r *flipt.UpdateFlagRequest) (*flipt.Flag, error) {\n-\tflag, err := s.Store.UpdateFlag(ctx, r)\n-\n-\tif err != nil {\n-\t\tvar merr *mysql.MySQLError\n-\n-\t\tif errors.As(err, &amp;merr) &amp;&amp; merr.Number == constraintForeignKeyErr {\n-\t\t\tif r.DefaultVariantId != \"\" {\n-\t\t\t\treturn nil, errs.ErrInvalidf(`variant %q not found for flag \"%s/%s\"`, r.DefaultVariantId, r.NamespaceKey, r.Key)\n-\t\t\t}\n-\n-\t\t\treturn nil, errs.ErrInvalidf(`flag \"%s/%s\" not found`, r.NamespaceKey, r.Key)\n-\t\t}\n-\n-\t\treturn nil, err\n-\t}\n-\n-\treturn flag, nil\n-}\n-\n-func (s *Store) CreateVariant(ctx context.Context, r *flipt.CreateVariantRequest) (*flipt.Variant, error) {\n-\tvariant, err := s.Store.CreateVariant(ctx, r)\n-\n-\tif err != nil {\n-\t\tvar merr *mysql.MySQLError\n-\n-\t\tif errors.As(err, &amp;merr) {\n-\t\t\tswitch merr.Number {\n-\t\t\tcase constraintForeignKeyErr:\n-\t\t\t\treturn nil, errs.ErrNotFoundf(`flag \"%s/%s\"`, r.NamespaceKey, r.FlagKey)\n-\t\t\tcase constraintUniqueErr:\n-\t\t\t\treturn nil, errs.ErrInvalidf(`variant %q is not unique for flag \"%s/%s\"`, r.Key, r.NamespaceKey, r.FlagKey)\n-\t\t\t}\n-\t\t}\n-\n-\t\treturn nil, err\n-\t}\n-\n-\treturn variant, nil\n-}\n-\n-func (s *Store) UpdateVariant(ctx context.Context, r *flipt.UpdateVariantRequest) (*flipt.Variant, error) {\n-\tvariant, err := s.Store.UpdateVariant(ctx, r)\n-\n-\tif err != nil {\n-\t\tvar merr *mysql.MySQLError\n-\n-\t\tif errors.As(err, &amp;merr) &amp;&amp; merr.Number == constraintUniqueErr {\n-\t\t\treturn nil, errs.ErrInvalidf(`variant %q is not unique for flag \"%s/%s\"`, r.Key, r.NamespaceKey, r.FlagKey)\n-\t\t}\n-\n-\t\treturn nil, err\n-\t}\n-\n-\treturn variant, nil\n-}\n-\n-func (s *Store) CreateSegment(ctx context.Context, r *flipt.CreateSegmentRequest) (*flipt.Segment, error) {\n-\tsegment, err := s.Store.CreateSegment(ctx, r)\n-\n-\tif err != nil {\n-\t\tvar merr *mysql.MySQLError\n-\n-\t\tif errors.As(err, &amp;merr) {\n-\t\t\tswitch merr.Number {\n-\t\t\tcase constraintForeignKeyErr:\n-\t\t\t\treturn nil, errs.ErrNotFoundf(\"namespace %q\", r.NamespaceKey)\n-\t\t\tcase constraintUniqueErr:\n-\t\t\t\treturn nil, errs.ErrInvalidf(`segment \"%s/%s\" is not unique`, r.NamespaceKey, r.Key)\n-\t\t\t}\n-\t\t}\n-\n-\t\treturn nil, err\n-\t}\n-\n-\treturn segment, nil\n-}\n-\n-func (s *Store) CreateConstraint(ctx context.Context, r *flipt.CreateConstraintRequest) (*flipt.Constraint, error) {\n-\tconstraint, err := s.Store.CreateConstraint(ctx, r)\n-\n-\tif err != nil {\n-\t\tvar merr *mysql.MySQLError\n-\n-\t\tif errors.As(err, &amp;merr) &amp;&amp; merr.Number == constraintForeignKeyErr {\n-\t\t\treturn nil, errs.ErrNotFoundf(`segment \"%s/%s\"`, r.NamespaceKey, r.SegmentKey)\n-\t\t}\n-\n-\t\treturn nil, err\n-\t}\n-\n-\treturn constraint, nil\n-}\n-\n-func (s *Store) CreateRollout(ctx context.Context, r *flipt.CreateRolloutRequest) (*flipt.Rollout, error) {\n-\trollout, err := s.Store.CreateRollout(ctx, r)\n-\n-\tif err != nil {\n-\t\tvar merr *mysql.MySQLError\n-\n-\t\tif errors.As(err, &amp;merr) &amp;&amp; merr.Number == constraintForeignKeyErr {\n-\t\t\tif segment := r.GetSegment(); segment != nil {\n-\t\t\t\treturn nil, errs.ErrNotFoundf(`flag \"%s/%s or segment %s\"`, r.NamespaceKey, r.FlagKey, segment.SegmentKey)\n-\t\t\t}\n-\t\t\treturn nil, errs.ErrNotFoundf(`flag \"%s/%s\"`, r.NamespaceKey, r.FlagKey)\n-\t\t}\n-\n-\t\treturn nil, err\n-\t}\n-\n-\treturn rollout, nil\n-}\n-\n-func (s *Store) CreateRule(ctx context.Context, r *flipt.CreateRuleRequest) (*flipt.Rule, error) {\n-\trule, err := s.Store.CreateRule(ctx, r)\n-\n-\tif err != nil {\n-\t\tvar merr *mysql.MySQLError\n-\n-\t\tif errors.As(err, &amp;merr) &amp;&amp; merr.Number == constraintForeignKeyErr {\n-\t\t\treturn nil, errs.ErrNotFoundf(`flag \"%s/%s\" or segment \"%s/%s\"`, r.NamespaceKey, r.FlagKey, r.NamespaceKey, r.SegmentKey)\n-\t\t}\n-\n-\t\treturn nil, err\n-\t}\n-\n-\treturn rule, nil\n-}\n-\n-func (s *Store) UpdateRule(ctx context.Context, r *flipt.UpdateRuleRequest) (*flipt.Rule, error) {\n-\trule, err := s.Store.UpdateRule(ctx, r)\n-\n-\tif err != nil {\n-\t\tvar merr *mysql.MySQLError\n-\n-\t\tif errors.As(err, &amp;merr) &amp;&amp; merr.Number == constraintForeignKeyErr {\n-\t\t\treturn nil, errs.ErrNotFoundf(`rule \"%s/%s\"`, r.NamespaceKey, r.Id)\n-\t\t}\n-\n-\t\treturn nil, err\n-\t}\n-\n-\treturn rule, nil\n-}\n-\n-func (s *Store) CreateDistribution(ctx context.Context, r *flipt.CreateDistributionRequest) (*flipt.Distribution, error) {\n-\tdist, err := s.Store.CreateDistribution(ctx, r)\n-\n-\tif err != nil {\n-\t\tvar merr *mysql.MySQLError\n-\n-\t\tif errors.As(err, &amp;merr) &amp;&amp; merr.Number == constraintForeignKeyErr {\n-\t\t\treturn nil, errs.ErrNotFoundf(\"variant %q, rule %q, flag %q in namespace %q\", r.VariantId, r.RuleId, r.FlagKey, r.NamespaceKey)\n-\t\t}\n-\n-\t\treturn nil, err\n-\t}\n-\n-\treturn dist, nil\n-}\ndiff --git a/internal/storage/sql/testing/testing.go b/internal/storage/sql/testing/testing.go\nindex 22d5722d..94c10027 100644\n--- a/internal/storage/sql/testing/testing.go\n+++ b/internal/storage/sql/testing/testing.go\n@@ -14,14 +14,12 @@ import (\n \t\"github.com/docker/go-connections/nat\"\n \t\"github.com/golang-migrate/migrate/v4\"\n \t\"github.com/golang-migrate/migrate/v4/database\"\n-\t\"github.com/golang-migrate/migrate/v4/database/cockroachdb\"\n \t\"github.com/testcontainers/testcontainers-go\"\n \t\"github.com/testcontainers/testcontainers-go/wait\"\n \t\"go.flipt.io/flipt/config/migrations\"\n \t\"go.flipt.io/flipt/internal/config\"\n \tfliptsql \"go.flipt.io/flipt/internal/storage/sql\"\n \n-\tms \"github.com/golang-migrate/migrate/v4/database/mysql\"\n \tpg \"github.com/golang-migrate/migrate/v4/database/postgres\"\n \t\"github.com/golang-migrate/migrate/v4/database/sqlite3\"\n \t_ \"github.com/golang-migrate/migrate/v4/source/file\"\n@@ -57,12 +55,8 @@ func Open() (*Database, error) {\n \tvar proto config.DatabaseProtocol\n \n \tswitch os.Getenv(\"FLIPT_TEST_DATABASE_PROTOCOL\") {\n-\tcase \"cockroachdb\", \"cockroach\":\n-\t\tproto = config.DatabaseCockroachDB\n \tcase \"postgres\":\n \t\tproto = config.DatabasePostgres\n-\tcase \"mysql\":\n-\t\tproto = config.DatabaseMySQL\n \tcase \"libsql\":\n \t\tproto = config.DatabaseLibSQL\n \tdefault:\n@@ -87,8 +81,6 @@ func Open() (*Database, error) {\n \t\t// It does not attempt to create an instance of the DB or do any cleanup.\n \t\tcfg.Database.URL = url\n \t} else {\n-\t\t// Otherwise, depending on the value of FLIPT_TEST_DATABASE_PROTOCOL a test database\n-\t\t// is created and destroyed for the lifecycle of the test.\n \t\tswitch proto {\n \t\tcase config.DatabaseSQLite:\n \t\t\tdbPath := createTempDBPath()\n@@ -102,11 +94,6 @@ func Open() (*Database, error) {\n \t\t\tcleanup = func() {\n \t\t\t\t_ = os.Remove(dbPath)\n \t\t\t}\n-\t\tcase config.DatabaseCockroachDB:\n-\t\t\tuseTestContainer = true\n-\t\t\tusername = \"root\"\n-\t\t\tpassword = \"\"\n-\t\t\tdbName = \"defaultdb\"\n \t\tdefault:\n \t\t\tuseTestContainer = true\n \t\t\tusername = \"flipt\"\n@@ -208,10 +195,6 @@ func newMigrator(db *sql.DB, driver fliptsql.Driver) (*migrate.Migrate, error) {\n \t\tdr, err = sqlite3.WithInstance(db, &amp;sqlite3.Config{})\n \tcase fliptsql.Postgres:\n \t\tdr, err = pg.WithInstance(db, &amp;pg.Config{})\n-\tcase fliptsql.CockroachDB:\n-\t\tdr, err = cockroachdb.WithInstance(db, &amp;cockroachdb.Config{})\n-\tcase fliptsql.MySQL:\n-\t\tdr, err = ms.WithInstance(db, &amp;ms.Config{})\n \n \tdefault:\n \t\treturn nil, fmt.Errorf(\"unknown driver: %s\", driver)\n@@ -258,33 +241,18 @@ func NewDBContainer(ctx context.Context, proto config.DatabaseProtocol) (*DBCont\n \t\t\t\t\"POSTGRES_DB\":       \"flipt_test\",\n \t\t\t},\n \t\t}\n-\tcase config.DatabaseCockroachDB:\n-\t\tport = nat.Port(\"26257/tcp\")\n+\tdefault:\n+\t\tport = nat.Port(\"5432/tcp\")\n \t\treq = testcontainers.ContainerRequest{\n-\t\t\tImage:        \"cockroachdb/cockroach:latest-v21.2\",\n-\t\t\tExposedPorts: []string{\"26257/tcp\", \"8080/tcp\"},\n+\t\t\tImage:        \"postgres:11.2\",\n+\t\t\tExposedPorts: []string{\"5432/tcp\"},\n \t\t\tWaitingFor: wait.ForSQL(port, \"postgres\", func(host string, port nat.Port) string {\n-\t\t\t\treturn fmt.Sprintf(\"postgres://root@%s:%s/defaultdb?sslmode=disable\", host, port.Port())\n-\t\t\t}),\n-\t\t\tEnv: map[string]string{\n-\t\t\t\t\"COCKROACH_USER\":     \"root\",\n-\t\t\t\t\"COCKROACH_DATABASE\": \"defaultdb\",\n-\t\t\t},\n-\t\t\tCmd: []string{\"start-single-node\", \"--insecure\"},\n-\t\t}\n-\tcase config.DatabaseMySQL:\n-\t\tport = nat.Port(\"3306/tcp\")\n-\t\treq = testcontainers.ContainerRequest{\n-\t\t\tImage:        \"mysql:8\",\n-\t\t\tExposedPorts: []string{\"3306/tcp\"},\n-\t\t\tWaitingFor: wait.ForSQL(port, \"mysql\", func(host string, port nat.Port) string {\n-\t\t\t\treturn fmt.Sprintf(\"flipt:password@tcp(%s:%s)/flipt_test?multiStatements=true\", host, port.Port())\n+\t\t\t\treturn fmt.Sprintf(\"postgres://flipt:password@%s:%s/flipt_test?sslmode=disable\", host, port.Port())\n \t\t\t}),\n \t\t\tEnv: map[string]string{\n-\t\t\t\t\"MYSQL_USER\":                 \"flipt\",\n-\t\t\t\t\"MYSQL_PASSWORD\":             \"password\",\n-\t\t\t\t\"MYSQL_DATABASE\":             \"flipt_test\",\n-\t\t\t\t\"MYSQL_ALLOW_EMPTY_PASSWORD\": \"true\",\n+\t\t\t\t\"POSTGRES_USER\":     \"flipt\",\n+\t\t\t\t\"POSTGRES_PASSWORD\": \"password\",\n+\t\t\t\t\"POSTGRES_DB\":       \"flipt_test\",\n \t\t\t},\n \t\t}\n \t}\ndiff --git a/rpc/flipt/analytics/analytics.pb.gw.go b/rpc/flipt/analytics/analytics.pb.gw.go\nindex 02772090..21d55647 100644\n--- a/rpc/flipt/analytics/analytics.pb.gw.go\n+++ b/rpc/flipt/analytics/analytics.pb.gw.go\n@@ -125,6 +125,7 @@ func local_request_AnalyticsService_GetFlagEvaluationsCount_0(ctx context.Contex\n // UnaryRPC     :call AnalyticsServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAnalyticsServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterAnalyticsServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AnalyticsServiceServer) error {\n \n \tmux.Handle(\"GET\", pattern_AnalyticsService_GetFlagEvaluationsCount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -190,7 +191,7 @@ func RegisterAnalyticsServiceHandler(ctx context.Context, mux *runtime.ServeMux,\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"AnalyticsServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"AnalyticsServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"AnalyticsServiceClient\" to call the correct interceptors.\n+// \"AnalyticsServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterAnalyticsServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AnalyticsServiceClient) error {\n \n \tmux.Handle(\"GET\", pattern_AnalyticsService_GetFlagEvaluationsCount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\ndiff --git a/rpc/flipt/auth/auth.pb.gw.go b/rpc/flipt/auth/auth.pb.gw.go\nindex d7b0da36..d3e3dc2c 100644\n--- a/rpc/flipt/auth/auth.pb.gw.go\n+++ b/rpc/flipt/auth/auth.pb.gw.go\n@@ -512,6 +512,7 @@ func local_request_AuthenticationMethodGithubService_Callback_0(ctx context.Cont\n // UnaryRPC     :call PublicAuthenticationServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterPublicAuthenticationServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterPublicAuthenticationServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server PublicAuthenticationServiceServer) error {\n \n \tmux.Handle(\"GET\", pattern_PublicAuthenticationService_ListAuthenticationMethods_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -546,6 +547,7 @@ func RegisterPublicAuthenticationServiceHandlerServer(ctx context.Context, mux *\n // UnaryRPC     :call AuthenticationServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAuthenticationServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterAuthenticationServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AuthenticationServiceServer) error {\n \n \tmux.Handle(\"GET\", pattern_AuthenticationService_GetAuthenticationSelf_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -680,6 +682,7 @@ func RegisterAuthenticationServiceHandlerServer(ctx context.Context, mux *runtim\n // UnaryRPC     :call AuthenticationMethodTokenServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAuthenticationMethodTokenServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterAuthenticationMethodTokenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AuthenticationMethodTokenServiceServer) error {\n \n \tmux.Handle(\"POST\", pattern_AuthenticationMethodTokenService_CreateToken_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -714,6 +717,7 @@ func RegisterAuthenticationMethodTokenServiceHandlerServer(ctx context.Context,\n // UnaryRPC     :call AuthenticationMethodOIDCServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAuthenticationMethodOIDCServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterAuthenticationMethodOIDCServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AuthenticationMethodOIDCServiceServer) error {\n \n \tmux.Handle(\"GET\", pattern_AuthenticationMethodOIDCService_AuthorizeURL_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -773,6 +777,7 @@ func RegisterAuthenticationMethodOIDCServiceHandlerServer(ctx context.Context, m\n // UnaryRPC     :call AuthenticationMethodKubernetesServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAuthenticationMethodKubernetesServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterAuthenticationMethodKubernetesServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AuthenticationMethodKubernetesServiceServer) error {\n \n \tmux.Handle(\"POST\", pattern_AuthenticationMethodKubernetesService_VerifyServiceAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -807,6 +812,7 @@ func RegisterAuthenticationMethodKubernetesServiceHandlerServer(ctx context.Cont\n // UnaryRPC     :call AuthenticationMethodGithubServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAuthenticationMethodGithubServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterAuthenticationMethodGithubServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AuthenticationMethodGithubServiceServer) error {\n \n \tmux.Handle(\"GET\", pattern_AuthenticationMethodGithubService_AuthorizeURL_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -897,7 +903,7 @@ func RegisterPublicAuthenticationServiceHandler(ctx context.Context, mux *runtim\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"PublicAuthenticationServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"PublicAuthenticationServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"PublicAuthenticationServiceClient\" to call the correct interceptors.\n+// \"PublicAuthenticationServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterPublicAuthenticationServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client PublicAuthenticationServiceClient) error {\n \n \tmux.Handle(\"GET\", pattern_PublicAuthenticationService_ListAuthenticationMethods_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -968,7 +974,7 @@ func RegisterAuthenticationServiceHandler(ctx context.Context, mux *runtime.Serv\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"AuthenticationServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"AuthenticationServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"AuthenticationServiceClient\" to call the correct interceptors.\n+// \"AuthenticationServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterAuthenticationServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AuthenticationServiceClient) error {\n \n \tmux.Handle(\"GET\", pattern_AuthenticationService_GetAuthenticationSelf_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -1143,7 +1149,7 @@ func RegisterAuthenticationMethodTokenServiceHandler(ctx context.Context, mux *r\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"AuthenticationMethodTokenServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"AuthenticationMethodTokenServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"AuthenticationMethodTokenServiceClient\" to call the correct interceptors.\n+// \"AuthenticationMethodTokenServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterAuthenticationMethodTokenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AuthenticationMethodTokenServiceClient) error {\n \n \tmux.Handle(\"POST\", pattern_AuthenticationMethodTokenService_CreateToken_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -1214,7 +1220,7 @@ func RegisterAuthenticationMethodOIDCServiceHandler(ctx context.Context, mux *ru\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"AuthenticationMethodOIDCServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"AuthenticationMethodOIDCServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"AuthenticationMethodOIDCServiceClient\" to call the correct interceptors.\n+// \"AuthenticationMethodOIDCServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterAuthenticationMethodOIDCServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AuthenticationMethodOIDCServiceClient) error {\n \n \tmux.Handle(\"GET\", pattern_AuthenticationMethodOIDCService_AuthorizeURL_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -1311,7 +1317,7 @@ func RegisterAuthenticationMethodKubernetesServiceHandler(ctx context.Context, m\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"AuthenticationMethodKubernetesServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"AuthenticationMethodKubernetesServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"AuthenticationMethodKubernetesServiceClient\" to call the correct interceptors.\n+// \"AuthenticationMethodKubernetesServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterAuthenticationMethodKubernetesServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AuthenticationMethodKubernetesServiceClient) error {\n \n \tmux.Handle(\"POST\", pattern_AuthenticationMethodKubernetesService_VerifyServiceAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -1382,7 +1388,7 @@ func RegisterAuthenticationMethodGithubServiceHandler(ctx context.Context, mux *\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"AuthenticationMethodGithubServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"AuthenticationMethodGithubServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"AuthenticationMethodGithubServiceClient\" to call the correct interceptors.\n+// \"AuthenticationMethodGithubServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterAuthenticationMethodGithubServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AuthenticationMethodGithubServiceClient) error {\n \n \tmux.Handle(\"GET\", pattern_AuthenticationMethodGithubService_AuthorizeURL_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\ndiff --git a/rpc/flipt/evaluation/evaluation.pb.gw.go b/rpc/flipt/evaluation/evaluation.pb.gw.go\nindex 010f8780..7b622059 100644\n--- a/rpc/flipt/evaluation/evaluation.pb.gw.go\n+++ b/rpc/flipt/evaluation/evaluation.pb.gw.go\n@@ -183,6 +183,7 @@ func local_request_DataService_EvaluationSnapshotNamespace_0(ctx context.Context\n // UnaryRPC     :call EvaluationServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterEvaluationServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterEvaluationServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server EvaluationServiceServer) error {\n \n \tmux.Handle(\"POST\", pattern_EvaluationService_Boolean_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -267,6 +268,7 @@ func RegisterEvaluationServiceHandlerServer(ctx context.Context, mux *runtime.Se\n // UnaryRPC     :call DataServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterDataServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterDataServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server DataServiceServer) error {\n \n \tmux.Handle(\"GET\", pattern_DataService_EvaluationSnapshotNamespace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -332,7 +334,7 @@ func RegisterEvaluationServiceHandler(ctx context.Context, mux *runtime.ServeMux\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"EvaluationServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"EvaluationServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"EvaluationServiceClient\" to call the correct interceptors.\n+// \"EvaluationServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterEvaluationServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client EvaluationServiceClient) error {\n \n \tmux.Handle(\"POST\", pattern_EvaluationService_Boolean_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -455,7 +457,7 @@ func RegisterDataServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"DataServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"DataServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"DataServiceClient\" to call the correct interceptors.\n+// \"DataServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterDataServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client DataServiceClient) error {\n \n \tmux.Handle(\"GET\", pattern_DataService_EvaluationSnapshotNamespace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\ndiff --git a/rpc/flipt/flipt.pb.gw.go b/rpc/flipt/flipt.pb.gw.go\nindex c2378ba2..24aadfd1 100644\n--- a/rpc/flipt/flipt.pb.gw.go\n+++ b/rpc/flipt/flipt.pb.gw.go\n@@ -4917,6 +4917,7 @@ func local_request_Flipt_DeleteConstraint_1(ctx context.Context, marshaler runti\n // UnaryRPC     :call FliptServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterFliptHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterFliptHandlerServer(ctx context.Context, mux *runtime.ServeMux, server FliptServer) error {\n \n \tmux.Handle(\"POST\", pattern_Flipt_Evaluate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -6582,7 +6583,7 @@ func RegisterFliptHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"FliptClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"FliptClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"FliptClient\" to call the correct interceptors.\n+// \"FliptClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterFliptHandlerClient(ctx context.Context, mux *runtime.ServeMux, client FliptClient) error {\n \n \tmux.Handle(\"POST\", pattern_Flipt_Evaluate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\ndiff --git a/rpc/flipt/flipt.yaml b/rpc/flipt/flipt.yaml\nindex aafe24e2..6ac4a8c3 100644\n--- a/rpc/flipt/flipt.yaml\n+++ b/rpc/flipt/flipt.yaml\n@@ -329,3 +329,8 @@ http:\n   # method: provider configuration\n   - selector: flipt.ofrep.OFREPService.GetProviderConfiguration\n     get: /ofrep/v1/configuration\n+\n+  # method: flag evaluation\n+  - selector: flipt.ofrep.OFREPService.EvaluateFlag\n+    post: /ofrep/v1/evaluate/flags/{key}\n+    body: \"*\"\ndiff --git a/rpc/flipt/meta/meta.pb.gw.go b/rpc/flipt/meta/meta.pb.gw.go\nindex d0fe385b..55d77d1a 100644\n--- a/rpc/flipt/meta/meta.pb.gw.go\n+++ b/rpc/flipt/meta/meta.pb.gw.go\n@@ -72,6 +72,7 @@ func local_request_MetadataService_GetInfo_0(ctx context.Context, marshaler runt\n // UnaryRPC     :call MetadataServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterMetadataServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterMetadataServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server MetadataServiceServer) error {\n \n \tmux.Handle(\"GET\", pattern_MetadataService_GetConfiguration_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -162,7 +163,7 @@ func RegisterMetadataServiceHandler(ctx context.Context, mux *runtime.ServeMux,\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"MetadataServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"MetadataServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"MetadataServiceClient\" to call the correct interceptors.\n+// \"MetadataServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterMetadataServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client MetadataServiceClient) error {\n \n \tmux.Handle(\"GET\", pattern_MetadataService_GetConfiguration_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\ndiff --git a/rpc/flipt/ofrep/ofrep.pb.go b/rpc/flipt/ofrep/ofrep.pb.go\nindex dba3b0d0..31e3d642 100644\n--- a/rpc/flipt/ofrep/ofrep.pb.go\n+++ b/rpc/flipt/ofrep/ofrep.pb.go\n@@ -9,6 +9,7 @@ package ofrep\n import (\n \tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n \tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n+\tstructpb \"google.golang.org/protobuf/types/known/structpb\"\n \treflect \"reflect\"\n \tsync \"sync\"\n )\n@@ -20,6 +21,55 @@ const (\n \t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n )\n \n+type EvaluateReason int32\n+\n+const (\n+\tEvaluateReason_DISABLED        EvaluateReason = 0\n+\tEvaluateReason_TARGETING_MATCH EvaluateReason = 1\n+\tEvaluateReason_DEFAULT         EvaluateReason = 2\n+)\n+\n+// Enum value maps for EvaluateReason.\n+var (\n+\tEvaluateReason_name = map[int32]string{\n+\t\t0: \"DISABLED\",\n+\t\t1: \"TARGETING_MATCH\",\n+\t\t2: \"DEFAULT\",\n+\t}\n+\tEvaluateReason_value = map[string]int32{\n+\t\t\"DISABLED\":        0,\n+\t\t\"TARGETING_MATCH\": 1,\n+\t\t\"DEFAULT\":         2,\n+\t}\n+)\n+\n+func (x EvaluateReason) Enum() *EvaluateReason {\n+\tp := new(EvaluateReason)\n+\t*p = x\n+\treturn p\n+}\n+\n+func (x EvaluateReason) String() string {\n+\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n+}\n+\n+func (EvaluateReason) Descriptor() protoreflect.EnumDescriptor {\n+\treturn file_ofrep_ofrep_proto_enumTypes[0].Descriptor()\n+}\n+\n+func (EvaluateReason) Type() protoreflect.EnumType {\n+\treturn &amp;file_ofrep_ofrep_proto_enumTypes[0]\n+}\n+\n+func (x EvaluateReason) Number() protoreflect.EnumNumber {\n+\treturn protoreflect.EnumNumber(x)\n+}\n+\n+// Deprecated: Use EvaluateReason.Descriptor instead.\n+func (EvaluateReason) EnumDescriptor() ([]byte, []int) {\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{0}\n+}\n+\n type GetProviderConfigurationRequest struct {\n \tstate         protoimpl.MessageState\n \tsizeCache     protoimpl.SizeCache\n@@ -317,57 +367,226 @@ func (x *FlagEvaluation) GetSupportedTypes() []string {\n \treturn nil\n }\n \n+type EvaluateFlagRequest struct {\n+\tstate         protoimpl.MessageState\n+\tsizeCache     protoimpl.SizeCache\n+\tunknownFields protoimpl.UnknownFields\n+\n+\tKey     string            `protobuf:\"bytes,1,opt,name=key,proto3\" json:\"key,omitempty\"`\n+\tContext map[string]string `protobuf:\"bytes,2,rep,name=context,proto3\" json:\"context,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"bytes,2,opt,name=value,proto3\"`\n+}\n+\n+func (x *EvaluateFlagRequest) Reset() {\n+\t*x = EvaluateFlagRequest{}\n+\tif protoimpl.UnsafeEnabled {\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[6]\n+\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n+\t\tms.StoreMessageInfo(mi)\n+\t}\n+}\n+\n+func (x *EvaluateFlagRequest) String() string {\n+\treturn protoimpl.X.MessageStringOf(x)\n+}\n+\n+func (*EvaluateFlagRequest) ProtoMessage() {}\n+\n+func (x *EvaluateFlagRequest) ProtoReflect() protoreflect.Message {\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[6]\n+\tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n+\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n+\t\tif ms.LoadMessageInfo() == nil {\n+\t\t\tms.StoreMessageInfo(mi)\n+\t\t}\n+\t\treturn ms\n+\t}\n+\treturn mi.MessageOf(x)\n+}\n+\n+// Deprecated: Use EvaluateFlagRequest.ProtoReflect.Descriptor instead.\n+func (*EvaluateFlagRequest) Descriptor() ([]byte, []int) {\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{6}\n+}\n+\n+func (x *EvaluateFlagRequest) GetKey() string {\n+\tif x != nil {\n+\t\treturn x.Key\n+\t}\n+\treturn \"\"\n+}\n+\n+func (x *EvaluateFlagRequest) GetContext() map[string]string {\n+\tif x != nil {\n+\t\treturn x.Context\n+\t}\n+\treturn nil\n+}\n+\n+type EvaluatedFlag struct {\n+\tstate         protoimpl.MessageState\n+\tsizeCache     protoimpl.SizeCache\n+\tunknownFields protoimpl.UnknownFields\n+\n+\tKey      string           `protobuf:\"bytes,1,opt,name=key,proto3\" json:\"key,omitempty\"`\n+\tReason   EvaluateReason   `protobuf:\"varint,2,opt,name=reason,proto3,enum=flipt.ofrep.EvaluateReason\" json:\"reason,omitempty\"`\n+\tVariant  string           `protobuf:\"bytes,3,opt,name=variant,proto3\" json:\"variant,omitempty\"`\n+\tMetadata *structpb.Struct `protobuf:\"bytes,4,opt,name=metadata,proto3\" json:\"metadata,omitempty\"`\n+\tValue    *structpb.Value  `protobuf:\"bytes,5,opt,name=value,proto3\" json:\"value,omitempty\"`\n+}\n+\n+func (x *EvaluatedFlag) Reset() {\n+\t*x = EvaluatedFlag{}\n+\tif protoimpl.UnsafeEnabled {\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[7]\n+\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n+\t\tms.StoreMessageInfo(mi)\n+\t}\n+}\n+\n+func (x *EvaluatedFlag) String() string {\n+\treturn protoimpl.X.MessageStringOf(x)\n+}\n+\n+func (*EvaluatedFlag) ProtoMessage() {}\n+\n+func (x *EvaluatedFlag) ProtoReflect() protoreflect.Message {\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[7]\n+\tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n+\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n+\t\tif ms.LoadMessageInfo() == nil {\n+\t\t\tms.StoreMessageInfo(mi)\n+\t\t}\n+\t\treturn ms\n+\t}\n+\treturn mi.MessageOf(x)\n+}\n+\n+// Deprecated: Use EvaluatedFlag.ProtoReflect.Descriptor instead.\n+func (*EvaluatedFlag) Descriptor() ([]byte, []int) {\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{7}\n+}\n+\n+func (x *EvaluatedFlag) GetKey() string {\n+\tif x != nil {\n+\t\treturn x.Key\n+\t}\n+\treturn \"\"\n+}\n+\n+func (x *EvaluatedFlag) GetReason() EvaluateReason {\n+\tif x != nil {\n+\t\treturn x.Reason\n+\t}\n+\treturn EvaluateReason_DISABLED\n+}\n+\n+func (x *EvaluatedFlag) GetVariant() string {\n+\tif x != nil {\n+\t\treturn x.Variant\n+\t}\n+\treturn \"\"\n+}\n+\n+func (x *EvaluatedFlag) GetMetadata() *structpb.Struct {\n+\tif x != nil {\n+\t\treturn x.Metadata\n+\t}\n+\treturn nil\n+}\n+\n+func (x *EvaluatedFlag) GetValue() *structpb.Value {\n+\tif x != nil {\n+\t\treturn x.Value\n+\t}\n+\treturn nil\n+}\n+\n var File_ofrep_ofrep_proto protoreflect.FileDescriptor\n \n var file_ofrep_ofrep_proto_rawDesc = []byte{\n \t0x0a, 0x11, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2f, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x70, 0x72,\n \t0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70,\n-\t0x22, 0x21, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43,\n-\t0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,\n-\t0x65, 0x73, 0x74, 0x22, 0x75, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64,\n-\t0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,\n-\t0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,\n-\t0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x63,\n-\t0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28,\n-\t0x0b, 0x32, 0x19, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e,\n-\t0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x0c, 0x63, 0x61,\n-\t0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xa3, 0x01, 0x0a, 0x0c, 0x43,\n-\t0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x12, 0x63,\n-\t0x61, 0x63, 0x68, 0x65, 0x5f, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f,\n-\t0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e,\n-\t0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e, 0x76, 0x61, 0x6c,\n-\t0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x63, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e,\n-\t0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x0f, 0x66, 0x6c,\n-\t0x61, 0x67, 0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20,\n-\t0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65,\n-\t0x70, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n-\t0x52, 0x0e, 0x66, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n-\t0x22, 0x43, 0x0a, 0x11, 0x43, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64,\n-\t0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x70, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67,\n-\t0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f,\n-\t0x66, 0x72, 0x65, 0x70, 0x2e, 0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x70, 0x6f,\n-\t0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x22, 0x5a, 0x0a, 0x07, 0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67,\n-\t0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,\n-\t0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x6d, 0x69,\n-\t0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76,\n-\t0x61, 0x6c, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x6d, 0x69, 0x6e,\n-\t0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4d,\n-\t0x73, 0x22, 0x39, 0x0a, 0x0e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74,\n-\t0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64,\n-\t0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x75,\n-\t0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x73, 0x32, 0x89, 0x01, 0x0a,\n-\t0x0c, 0x4f, 0x46, 0x52, 0x45, 0x50, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x79, 0x0a,\n-\t0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66,\n-\t0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x66, 0x6c, 0x69, 0x70,\n-\t0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69,\n-\t0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n-\t0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e,\n-\t0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65,\n-\t0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,\n-\t0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x23, 0x5a, 0x21, 0x67, 0x6f, 0x2e, 0x66,\n-\t0x6c, 0x69, 0x70, 0x74, 0x2e, 0x69, 0x6f, 0x2f, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2f, 0x72, 0x70,\n-\t0x63, 0x2f, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2f, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x62, 0x06, 0x70,\n-\t0x72, 0x6f, 0x74, 0x6f, 0x33,\n+\t0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,\n+\t0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x21,\n+\t0x0a, 0x1f, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e,\n+\t0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,\n+\t0x74, 0x22, 0x75, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72,\n+\t0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73,\n+\t0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,\n+\t0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x63, 0x61, 0x70,\n+\t0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,\n+\t0x19, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x43, 0x61,\n+\t0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61,\n+\t0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xa3, 0x01, 0x0a, 0x0c, 0x43, 0x61, 0x70,\n+\t0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x12, 0x63, 0x61, 0x63,\n+\t0x68, 0x65, 0x5f, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,\n+\t0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66,\n+\t0x72, 0x65, 0x70, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64,\n+\t0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x63, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e, 0x76, 0x61,\n+\t0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x0f, 0x66, 0x6c, 0x61, 0x67,\n+\t0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,\n+\t0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e,\n+\t0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e,\n+\t0x66, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x43,\n+\t0x0a, 0x11, 0x43, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,\n+\t0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x70, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x01,\n+\t0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72,\n+\t0x65, 0x70, 0x2e, 0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x70, 0x6f, 0x6c, 0x6c,\n+\t0x69, 0x6e, 0x67, 0x22, 0x5a, 0x0a, 0x07, 0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x18,\n+\t0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52,\n+\t0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x6d, 0x69, 0x6e, 0x5f,\n+\t0x70, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c,\n+\t0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x6d, 0x69, 0x6e, 0x50, 0x6f,\n+\t0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4d, 0x73, 0x22,\n+\t0x39, 0x0a, 0x0e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f,\n+\t0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x74,\n+\t0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x75, 0x70, 0x70,\n+\t0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0xac, 0x01, 0x0a, 0x13, 0x45,\n+\t0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65,\n+\t0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,\n+\t0x03, 0x6b, 0x65, 0x79, 0x12, 0x47, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18,\n+\t0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66,\n+\t0x72, 0x65, 0x70, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67,\n+\t0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x45,\n+\t0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x3a, 0x0a,\n+\t0x0c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,\n+\t0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,\n+\t0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,\n+\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd3, 0x01, 0x0a, 0x0d, 0x45, 0x76,\n+\t0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x6b,\n+\t0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a,\n+\t0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e,\n+\t0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x45, 0x76, 0x61, 0x6c,\n+\t0x75, 0x61, 0x74, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73,\n+\t0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x18, 0x03, 0x20,\n+\t0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x08,\n+\t0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17,\n+\t0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,\n+\t0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,\n+\t0x61, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,\n+\t0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,\n+\t0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a,\n+\t0x40, 0x0a, 0x0e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f,\n+\t0x6e, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x00, 0x12,\n+\t0x13, 0x0a, 0x0f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x41, 0x54,\n+\t0x43, 0x48, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10,\n+\t0x02, 0x32, 0xd9, 0x01, 0x0a, 0x0c, 0x4f, 0x46, 0x52, 0x45, 0x50, 0x53, 0x65, 0x72, 0x76, 0x69,\n+\t0x63, 0x65, 0x12, 0x79, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65,\n+\t0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c,\n+\t0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x47, 0x65, 0x74,\n+\t0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72,\n+\t0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x66,\n+\t0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72,\n+\t0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74,\n+\t0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a,\n+\t0x0c, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x20, 0x2e,\n+\t0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x45, 0x76, 0x61, 0x6c,\n+\t0x75, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,\n+\t0x1a, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x45, 0x76,\n+\t0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x61, 0x67, 0x22, 0x00, 0x42, 0x23, 0x5a,\n+\t0x21, 0x67, 0x6f, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x69, 0x6f, 0x2f, 0x66, 0x6c, 0x69,\n+\t0x70, 0x74, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2f, 0x6f, 0x66, 0x72,\n+\t0x65, 0x70, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n }\n \n var (\n@@ -382,27 +601,40 @@ func file_ofrep_ofrep_proto_rawDescGZIP() []byte {\n \treturn file_ofrep_ofrep_proto_rawDescData\n }\n \n-var file_ofrep_ofrep_proto_msgTypes = make([]protoimpl.MessageInfo, 6)\n+var file_ofrep_ofrep_proto_enumTypes = make([]protoimpl.EnumInfo, 1)\n+var file_ofrep_ofrep_proto_msgTypes = make([]protoimpl.MessageInfo, 9)\n var file_ofrep_ofrep_proto_goTypes = []any{\n-\t(*GetProviderConfigurationRequest)(nil),  // 0: flipt.ofrep.GetProviderConfigurationRequest\n-\t(*GetProviderConfigurationResponse)(nil), // 1: flipt.ofrep.GetProviderConfigurationResponse\n-\t(*Capabilities)(nil),                     // 2: flipt.ofrep.Capabilities\n-\t(*CacheInvalidation)(nil),                // 3: flipt.ofrep.CacheInvalidation\n-\t(*Polling)(nil),                          // 4: flipt.ofrep.Polling\n-\t(*FlagEvaluation)(nil),                   // 5: flipt.ofrep.FlagEvaluation\n+\t(EvaluateReason)(0),                      // 0: flipt.ofrep.EvaluateReason\n+\t(*GetProviderConfigurationRequest)(nil),  // 1: flipt.ofrep.GetProviderConfigurationRequest\n+\t(*GetProviderConfigurationResponse)(nil), // 2: flipt.ofrep.GetProviderConfigurationResponse\n+\t(*Capabilities)(nil),                     // 3: flipt.ofrep.Capabilities\n+\t(*CacheInvalidation)(nil),                // 4: flipt.ofrep.CacheInvalidation\n+\t(*Polling)(nil),                          // 5: flipt.ofrep.Polling\n+\t(*FlagEvaluation)(nil),                   // 6: flipt.ofrep.FlagEvaluation\n+\t(*EvaluateFlagRequest)(nil),              // 7: flipt.ofrep.EvaluateFlagRequest\n+\t(*EvaluatedFlag)(nil),                    // 8: flipt.ofrep.EvaluatedFlag\n+\tnil,                                      // 9: flipt.ofrep.EvaluateFlagRequest.ContextEntry\n+\t(*structpb.Struct)(nil),                  // 10: google.protobuf.Struct\n+\t(*structpb.Value)(nil),                   // 11: google.protobuf.Value\n }\n var file_ofrep_ofrep_proto_depIdxs = []int32{\n-\t2, // 0: flipt.ofrep.GetProviderConfigurationResponse.capabilities:type_name -&gt; flipt.ofrep.Capabilities\n-\t3, // 1: flipt.ofrep.Capabilities.cache_invalidation:type_name -&gt; flipt.ofrep.CacheInvalidation\n-\t5, // 2: flipt.ofrep.Capabilities.flag_evaluation:type_name -&gt; flipt.ofrep.FlagEvaluation\n-\t4, // 3: flipt.ofrep.CacheInvalidation.polling:type_name -&gt; flipt.ofrep.Polling\n-\t0, // 4: flipt.ofrep.OFREPService.GetProviderConfiguration:input_type -&gt; flipt.ofrep.GetProviderConfigurationRequest\n-\t1, // 5: flipt.ofrep.OFREPService.GetProviderConfiguration:output_type -&gt; flipt.ofrep.GetProviderConfigurationResponse\n-\t5, // [5:6] is the sub-list for method output_type\n-\t4, // [4:5] is the sub-list for method input_type\n-\t4, // [4:4] is the sub-list for extension type_name\n-\t4, // [4:4] is the sub-list for extension extendee\n-\t0, // [0:4] is the sub-list for field type_name\n+\t3,  // 0: flipt.ofrep.GetProviderConfigurationResponse.capabilities:type_name -&gt; flipt.ofrep.Capabilities\n+\t4,  // 1: flipt.ofrep.Capabilities.cache_invalidation:type_name -&gt; flipt.ofrep.CacheInvalidation\n+\t6,  // 2: flipt.ofrep.Capabilities.flag_evaluation:type_name -&gt; flipt.ofrep.FlagEvaluation\n+\t5,  // 3: flipt.ofrep.CacheInvalidation.polling:type_name -&gt; flipt.ofrep.Polling\n+\t9,  // 4: flipt.ofrep.EvaluateFlagRequest.context:type_name -&gt; flipt.ofrep.EvaluateFlagRequest.ContextEntry\n+\t0,  // 5: flipt.ofrep.EvaluatedFlag.reason:type_name -&gt; flipt.ofrep.EvaluateReason\n+\t10, // 6: flipt.ofrep.EvaluatedFlag.metadata:type_name -&gt; google.protobuf.Struct\n+\t11, // 7: flipt.ofrep.EvaluatedFlag.value:type_name -&gt; google.protobuf.Value\n+\t1,  // 8: flipt.ofrep.OFREPService.GetProviderConfiguration:input_type -&gt; flipt.ofrep.GetProviderConfigurationRequest\n+\t7,  // 9: flipt.ofrep.OFREPService.EvaluateFlag:input_type -&gt; flipt.ofrep.EvaluateFlagRequest\n+\t2,  // 10: flipt.ofrep.OFREPService.GetProviderConfiguration:output_type -&gt; flipt.ofrep.GetProviderConfigurationResponse\n+\t8,  // 11: flipt.ofrep.OFREPService.EvaluateFlag:output_type -&gt; flipt.ofrep.EvaluatedFlag\n+\t10, // [10:12] is the sub-list for method output_type\n+\t8,  // [8:10] is the sub-list for method input_type\n+\t8,  // [8:8] is the sub-list for extension type_name\n+\t8,  // [8:8] is the sub-list for extension extendee\n+\t0,  // [0:8] is the sub-list for field type_name\n }\n \n func init() { file_ofrep_ofrep_proto_init() }\n@@ -483,19 +715,44 @@ func file_ofrep_ofrep_proto_init() {\n \t\t\t\treturn nil\n \t\t\t}\n \t\t}\n+\t\tfile_ofrep_ofrep_proto_msgTypes[6].Exporter = func(v any, i int) any {\n+\t\t\tswitch v := v.(*EvaluateFlagRequest); i {\n+\t\t\tcase 0:\n+\t\t\t\treturn &amp;v.state\n+\t\t\tcase 1:\n+\t\t\t\treturn &amp;v.sizeCache\n+\t\t\tcase 2:\n+\t\t\t\treturn &amp;v.unknownFields\n+\t\t\tdefault:\n+\t\t\t\treturn nil\n+\t\t\t}\n+\t\t}\n+\t\tfile_ofrep_ofrep_proto_msgTypes[7].Exporter = func(v any, i int) any {\n+\t\t\tswitch v := v.(*EvaluatedFlag); i {\n+\t\t\tcase 0:\n+\t\t\t\treturn &amp;v.state\n+\t\t\tcase 1:\n+\t\t\t\treturn &amp;v.sizeCache\n+\t\t\tcase 2:\n+\t\t\t\treturn &amp;v.unknownFields\n+\t\t\tdefault:\n+\t\t\t\treturn nil\n+\t\t\t}\n+\t\t}\n \t}\n \ttype x struct{}\n \tout := protoimpl.TypeBuilder{\n \t\tFile: protoimpl.DescBuilder{\n \t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n \t\t\tRawDescriptor: file_ofrep_ofrep_proto_rawDesc,\n-\t\t\tNumEnums:      0,\n-\t\t\tNumMessages:   6,\n+\t\t\tNumEnums:      1,\n+\t\t\tNumMessages:   9,\n \t\t\tNumExtensions: 0,\n \t\t\tNumServices:   1,\n \t\t},\n \t\tGoTypes:           file_ofrep_ofrep_proto_goTypes,\n \t\tDependencyIndexes: file_ofrep_ofrep_proto_depIdxs,\n+\t\tEnumInfos:         file_ofrep_ofrep_proto_enumTypes,\n \t\tMessageInfos:      file_ofrep_ofrep_proto_msgTypes,\n \t}.Build()\n \tFile_ofrep_ofrep_proto = out.File\ndiff --git a/rpc/flipt/ofrep/ofrep.pb.gw.go b/rpc/flipt/ofrep/ofrep.pb.gw.go\nindex 0db623bb..85ace20f 100644\n--- a/rpc/flipt/ofrep/ofrep.pb.gw.go\n+++ b/rpc/flipt/ofrep/ofrep.pb.gw.go\n@@ -49,10 +49,71 @@ func local_request_OFREPService_GetProviderConfiguration_0(ctx context.Context,\n \n }\n \n+func request_OFREPService_EvaluateFlag_0(ctx context.Context, marshaler runtime.Marshaler, client OFREPServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n+\tvar protoReq EvaluateFlagRequest\n+\tvar metadata runtime.ServerMetadata\n+\n+\tif err := marshaler.NewDecoder(req.Body).Decode(&amp;protoReq); err != nil &amp;&amp; err != io.EOF {\n+\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n+\t}\n+\n+\tvar (\n+\t\tval string\n+\t\tok  bool\n+\t\terr error\n+\t\t_   = err\n+\t)\n+\n+\tval, ok = pathParams[\"key\"]\n+\tif !ok {\n+\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"key\")\n+\t}\n+\n+\tprotoReq.Key, err = runtime.String(val)\n+\tif err != nil {\n+\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"key\", err)\n+\t}\n+\n+\tmsg, err := client.EvaluateFlag(ctx, &amp;protoReq, grpc.Header(&amp;metadata.HeaderMD), grpc.Trailer(&amp;metadata.TrailerMD))\n+\treturn msg, metadata, err\n+\n+}\n+\n+func local_request_OFREPService_EvaluateFlag_0(ctx context.Context, marshaler runtime.Marshaler, server OFREPServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n+\tvar protoReq EvaluateFlagRequest\n+\tvar metadata runtime.ServerMetadata\n+\n+\tif err := marshaler.NewDecoder(req.Body).Decode(&amp;protoReq); err != nil &amp;&amp; err != io.EOF {\n+\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n+\t}\n+\n+\tvar (\n+\t\tval string\n+\t\tok  bool\n+\t\terr error\n+\t\t_   = err\n+\t)\n+\n+\tval, ok = pathParams[\"key\"]\n+\tif !ok {\n+\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"key\")\n+\t}\n+\n+\tprotoReq.Key, err = runtime.String(val)\n+\tif err != nil {\n+\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"key\", err)\n+\t}\n+\n+\tmsg, err := server.EvaluateFlag(ctx, &amp;protoReq)\n+\treturn msg, metadata, err\n+\n+}\n+\n // RegisterOFREPServiceHandlerServer registers the http handlers for service OFREPService to \"mux\".\n // UnaryRPC     :call OFREPServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterOFREPServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterOFREPServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server OFREPServiceServer) error {\n \n \tmux.Handle(\"GET\", pattern_OFREPService_GetProviderConfiguration_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -80,6 +141,31 @@ func RegisterOFREPServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu\n \n \t})\n \n+\tmux.Handle(\"POST\", pattern_OFREPService_EvaluateFlag_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n+\t\tctx, cancel := context.WithCancel(req.Context())\n+\t\tdefer cancel()\n+\t\tvar stream runtime.ServerTransportStream\n+\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &amp;stream)\n+\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n+\t\tvar err error\n+\t\tvar annotatedContext context.Context\n+\t\tannotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, \"/flipt.ofrep.OFREPService/EvaluateFlag\", runtime.WithHTTPPathPattern(\"/ofrep/v1/evaluate/flags/{key}\"))\n+\t\tif err != nil {\n+\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n+\t\t\treturn\n+\t\t}\n+\t\tresp, md, err := local_request_OFREPService_EvaluateFlag_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n+\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n+\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n+\t\tif err != nil {\n+\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n+\t\t\treturn\n+\t\t}\n+\n+\t\tforward_OFREPService_EvaluateFlag_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n+\n+\t})\n+\n \treturn nil\n }\n \n@@ -118,7 +204,7 @@ func RegisterOFREPServiceHandler(ctx context.Context, mux *runtime.ServeMux, con\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"OFREPServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"OFREPServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"OFREPServiceClient\" to call the correct interceptors.\n+// \"OFREPServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterOFREPServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client OFREPServiceClient) error {\n \n \tmux.Handle(\"GET\", pattern_OFREPService_GetProviderConfiguration_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -143,13 +229,39 @@ func RegisterOFREPServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu\n \n \t})\n \n+\tmux.Handle(\"POST\", pattern_OFREPService_EvaluateFlag_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n+\t\tctx, cancel := context.WithCancel(req.Context())\n+\t\tdefer cancel()\n+\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n+\t\tvar err error\n+\t\tvar annotatedContext context.Context\n+\t\tannotatedContext, err = runtime.AnnotateContext(ctx, mux, req, \"/flipt.ofrep.OFREPService/EvaluateFlag\", runtime.WithHTTPPathPattern(\"/ofrep/v1/evaluate/flags/{key}\"))\n+\t\tif err != nil {\n+\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n+\t\t\treturn\n+\t\t}\n+\t\tresp, md, err := request_OFREPService_EvaluateFlag_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n+\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n+\t\tif err != nil {\n+\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n+\t\t\treturn\n+\t\t}\n+\n+\t\tforward_OFREPService_EvaluateFlag_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n+\n+\t})\n+\n \treturn nil\n }\n \n var (\n \tpattern_OFREPService_GetProviderConfiguration_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"ofrep\", \"v1\", \"configuration\"}, \"\"))\n+\n+\tpattern_OFREPService_EvaluateFlag_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{\"ofrep\", \"v1\", \"evaluate\", \"flags\", \"key\"}, \"\"))\n )\n \n var (\n \tforward_OFREPService_GetProviderConfiguration_0 = runtime.ForwardResponseMessage\n+\n+\tforward_OFREPService_EvaluateFlag_0 = runtime.ForwardResponseMessage\n )\ndiff --git a/rpc/flipt/ofrep/ofrep.proto b/rpc/flipt/ofrep/ofrep.proto\nindex cd01cde4..e20b032d 100644\n--- a/rpc/flipt/ofrep/ofrep.proto\n+++ b/rpc/flipt/ofrep/ofrep.proto\n@@ -2,6 +2,8 @@ syntax = \"proto3\";\n \n package flipt.ofrep;\n \n+import \"google/protobuf/struct.proto\";\n+\n option go_package = \"go.flipt.io/flipt/rpc/flipt/ofrep\";\n \n message GetProviderConfigurationRequest {}\n@@ -29,7 +31,27 @@ message FlagEvaluation {\n   repeated string supported_types = 1;\n }\n \n+enum EvaluateReason {\n+  DISABLED = 0;\n+  TARGETING_MATCH = 1;\n+  DEFAULT = 2;\n+}\n+\n+message EvaluateFlagRequest {\n+  string key = 1;\n+  map context = 2;\n+}\n+\n+message EvaluatedFlag {\n+  string key = 1;\n+  EvaluateReason reason = 2;\n+  string variant = 3;\n+  google.protobuf.Struct metadata = 4;\n+  google.protobuf.Value value = 5;\n+}\n+\n // flipt:sdk:ignore\n service OFREPService {\n   rpc GetProviderConfiguration(GetProviderConfigurationRequest) returns (GetProviderConfigurationResponse) {}\n+  rpc EvaluateFlag(EvaluateFlagRequest) returns (EvaluatedFlag) {}\n }\ndiff --git a/rpc/flipt/ofrep/ofrep_grpc.pb.go b/rpc/flipt/ofrep/ofrep_grpc.pb.go\nindex 62c59ac7..e1057ea4 100644\n--- a/rpc/flipt/ofrep/ofrep_grpc.pb.go\n+++ b/rpc/flipt/ofrep/ofrep_grpc.pb.go\n@@ -20,6 +20,7 @@ const _ = grpc.SupportPackageIsVersion8\n \n const (\n \tOFREPService_GetProviderConfiguration_FullMethodName = \"/flipt.ofrep.OFREPService/GetProviderConfiguration\"\n+\tOFREPService_EvaluateFlag_FullMethodName             = \"/flipt.ofrep.OFREPService/EvaluateFlag\"\n )\n \n // OFREPServiceClient is the client API for OFREPService service.\n@@ -29,6 +30,7 @@ const (\n // flipt:sdk:ignore\n type OFREPServiceClient interface {\n \tGetProviderConfiguration(ctx context.Context, in *GetProviderConfigurationRequest, opts ...grpc.CallOption) (*GetProviderConfigurationResponse, error)\n+\tEvaluateFlag(ctx context.Context, in *EvaluateFlagRequest, opts ...grpc.CallOption) (*EvaluatedFlag, error)\n }\n \n type oFREPServiceClient struct {\n@@ -49,6 +51,16 @@ func (c *oFREPServiceClient) GetProviderConfiguration(ctx context.Context, in *G\n \treturn out, nil\n }\n \n+func (c *oFREPServiceClient) EvaluateFlag(ctx context.Context, in *EvaluateFlagRequest, opts ...grpc.CallOption) (*EvaluatedFlag, error) {\n+\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n+\tout := new(EvaluatedFlag)\n+\terr := c.cc.Invoke(ctx, OFREPService_EvaluateFlag_FullMethodName, in, out, cOpts...)\n+\tif err != nil {\n+\t\treturn nil, err\n+\t}\n+\treturn out, nil\n+}\n+\n // OFREPServiceServer is the server API for OFREPService service.\n // All implementations must embed UnimplementedOFREPServiceServer\n // for forward compatibility\n@@ -56,6 +68,7 @@ func (c *oFREPServiceClient) GetProviderConfiguration(ctx context.Context, in *G\n // flipt:sdk:ignore\n type OFREPServiceServer interface {\n \tGetProviderConfiguration(context.Context, *GetProviderConfigurationRequest) (*GetProviderConfigurationResponse, error)\n+\tEvaluateFlag(context.Context, *EvaluateFlagRequest) (*EvaluatedFlag, error)\n \tmustEmbedUnimplementedOFREPServiceServer()\n }\n \n@@ -66,6 +79,9 @@ type UnimplementedOFREPServiceServer struct {\n func (UnimplementedOFREPServiceServer) GetProviderConfiguration(context.Context, *GetProviderConfigurationRequest) (*GetProviderConfigurationResponse, error) {\n \treturn nil, status.Errorf(codes.Unimplemented, \"method GetProviderConfiguration not implemented\")\n }\n+func (UnimplementedOFREPServiceServer) EvaluateFlag(context.Context, *EvaluateFlagRequest) (*EvaluatedFlag, error) {\n+\treturn nil, status.Errorf(codes.Unimplemented, \"method EvaluateFlag not implemented\")\n+}\n func (UnimplementedOFREPServiceServer) mustEmbedUnimplementedOFREPServiceServer() {}\n \n // UnsafeOFREPServiceServer may be embedded to opt out of forward compatibility for this service.\n@@ -97,6 +113,24 @@ func _OFREPService_GetProviderConfiguration_Handler(srv interface{}, ctx context\n \treturn interceptor(ctx, in, info, handler)\n }\n \n+func _OFREPService_EvaluateFlag_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n+\tin := new(EvaluateFlagRequest)\n+\tif err := dec(in); err != nil {\n+\t\treturn nil, err\n+\t}\n+\tif interceptor == nil {\n+\t\treturn srv.(OFREPServiceServer).EvaluateFlag(ctx, in)\n+\t}\n+\tinfo := &amp;grpc.UnaryServerInfo{\n+\t\tServer:     srv,\n+\t\tFullMethod: OFREPService_EvaluateFlag_FullMethodName,\n+\t}\n+\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n+\t\treturn srv.(OFREPServiceServer).EvaluateFlag(ctx, req.(*EvaluateFlagRequest))\n+\t}\n+\treturn interceptor(ctx, in, info, handler)\n+}\n+\n // OFREPService_ServiceDesc is the grpc.ServiceDesc for OFREPService service.\n // It's only intended for direct use with grpc.RegisterService,\n // and not to be introspected or modified (even as a copy)\n@@ -108,6 +142,10 @@ var OFREPService_ServiceDesc = grpc.ServiceDesc{\n \t\t\tMethodName: \"GetProviderConfiguration\",\n \t\t\tHandler:    _OFREPService_GetProviderConfiguration_Handler,\n \t\t},\n+\t\t{\n+\t\t\tMethodName: \"EvaluateFlag\",\n+\t\t\tHandler:    _OFREPService_EvaluateFlag_Handler,\n+\t\t},\n \t},\n \tStreams:  []grpc.StreamDesc{},\n \tMetadata: \"ofrep/ofrep.proto\",\n", "creation_timestamp": "2026-07-27T00:52:05.488169Z"}, {"uuid": "f1b47d80-17f8-49f4-8c36-c856e325b886", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://gist.github.com/tu-trinh-scale/a9e8b1d357515416fcb2f81261c1c92e", "content": "diff --git a/.github/workflows/proto.yml b/.github/workflows/proto.yml\nindex dde4116b..92aa706f 100644\n--- a/.github/workflows/proto.yml\n+++ b/.github/workflows/proto.yml\n@@ -29,11 +29,6 @@ jobs:\n         with:\n           input: \"rpc/flipt\"\n \n-      - uses: bufbuild/buf-breaking-action@v1\n-        with:\n-          input: \"rpc/flipt\"\n-          against: \"https://github.com/${GITHUB_REPOSITORY}.git#branch=main\"\n-\n   proto-check:\n     name: \"Check Generated Code\"\n     runs-on: ubuntu-latest\ndiff --git a/.nancy-ignore b/.nancy-ignore\nindex b7e45e67..b08384e4 100644\n--- a/.nancy-ignore\n+++ b/.nancy-ignore\n@@ -2,3 +2,5 @@\n CVE-2020-15114\n CVE-2020-15115\n CVE-2020-15136\n+CVE-2023-44487\n+CVE-2023-32732\ndiff --git a/config/migrations/clickhouse/0_initial_clickhouse.up.sql b/config/migrations/clickhouse/0_initial_clickhouse.up.sql\nindex decbc90c..912b00ec 100644\n--- a/config/migrations/clickhouse/0_initial_clickhouse.up.sql\n+++ b/config/migrations/clickhouse/0_initial_clickhouse.up.sql\n@@ -1,5 +1,4 @@\n CREATE TABLE IF NOT EXISTS flipt_counter_analytics (\n     `timestamp` DateTime('UTC'), `analytic_name` String, `namespace_key` String, `flag_key` String, `flag_type` Enum('VARIANT_FLAG_TYPE' = 1, 'BOOLEAN_FLAG_TYPE' = 2), `reason` Enum('UNKNOWN_EVALUATION_REASON' = 1, 'FLAG_DISABLED_EVALUATION_REASON' = 2, 'MATCH_EVALUATION_REASON' = 3, 'DEFAULT_EVALUATION_REASON' = 4), `match` Nullable(Bool), `evaluation_value` Nullable(String), `value` UInt32\n ) Engine = MergeTree\n-ORDER BY timestamp\n-TTL timestamp + INTERVAL 1 WEEK;\n+ORDER BY timestamp;\ndiff --git a/config/migrations/cockroachdb/0_initial.up.sql b/config/migrations/cockroachdb/0_initial.up.sql\ndeleted file mode 100644\nindex 94ddf804..00000000\n--- a/config/migrations/cockroachdb/0_initial.up.sql\n+++ /dev/null\n@@ -1,58 +0,0 @@\n-CREATE TABLE IF NOT EXISTS flags (\n-  key VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  name VARCHAR(255) NOT NULL,\n-  description TEXT NOT NULL,\n-  enabled BOOLEAN DEFAULT FALSE NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL\n-);\n-\n-CREATE TABLE IF NOT EXISTS segments (\n-  key VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  name VARCHAR(255) NOT NULL,\n-  description TEXT NOT NULL,\n-  match_type INTEGER DEFAULT 0 NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL\n-);\n-\n-CREATE TABLE IF NOT EXISTS variants (\n-  id VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  flag_key VARCHAR(255) NOT NULL REFERENCES flags ON DELETE CASCADE,\n-  key VARCHAR(255) NOT NULL,\n-  name VARCHAR(255) NOT NULL,\n-  description TEXT NOT NULL,\n-  attachment JSONB,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  CONSTRAINT variants_flag_key_key UNIQUE(flag_key, key)\n-);\n-\n-CREATE TABLE IF NOT EXISTS constraints (\n-  id VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  segment_key VARCHAR(255) NOT NULL REFERENCES segments ON DELETE CASCADE,\n-  type INTEGER DEFAULT 0 NOT NULL,\n-  property VARCHAR(255) NOT NULL,\n-  operator VARCHAR(255) NOT NULL,\n-  value TEXT NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL\n-);\n-\n-CREATE TABLE IF NOT EXISTS rules (\n-  id VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  flag_key VARCHAR(255) NOT NULL REFERENCES flags ON DELETE CASCADE,\n-  segment_key VARCHAR(255) NOT NULL REFERENCES segments ON DELETE CASCADE,\n-  rank INTEGER DEFAULT 1 NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL\n-);\n-\n-CREATE TABLE IF NOT EXISTS distributions (\n-  id VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  rule_id VARCHAR(255) NOT NULL REFERENCES rules ON DELETE CASCADE,\n-  variant_id VARCHAR(255) NOT NULL REFERENCES variants ON DELETE CASCADE,\n-  rollout float DEFAULT 0 NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL\n-);\ndiff --git a/config/migrations/cockroachdb/10_namespaces_add_state_modified_at.up.sql b/config/migrations/cockroachdb/10_namespaces_add_state_modified_at.up.sql\ndeleted file mode 100644\nindex 1d8bb696..00000000\n--- a/config/migrations/cockroachdb/10_namespaces_add_state_modified_at.up.sql\n+++ /dev/null\n@@ -1 +0,0 @@\n-ALTER TABLE namespaces ADD COLUMN state_modified_at TIMESTAMP;\ndiff --git a/config/migrations/cockroachdb/11_default_variant.up.sql b/config/migrations/cockroachdb/11_default_variant.up.sql\ndeleted file mode 100644\nindex 1f6ac9c5..00000000\n--- a/config/migrations/cockroachdb/11_default_variant.up.sql\n+++ /dev/null\n@@ -1 +0,0 @@\n-ALTER TABLE flags ADD COLUMN default_variant_id VARCHAR(255) REFERENCES variants(id) ON DELETE SET NULL;\n\\ No newline at end of file\ndiff --git a/config/migrations/cockroachdb/12_flag_metadata.up.sql b/config/migrations/cockroachdb/12_flag_metadata.up.sql\ndeleted file mode 100644\nindex ac21fc53..00000000\n--- a/config/migrations/cockroachdb/12_flag_metadata.up.sql\n+++ /dev/null\n@@ -1 +0,0 @@\n-ALTER TABLE flags ADD COLUMN metadata JSON;\ndiff --git a/config/migrations/cockroachdb/1_create_table_authentications.up.sql b/config/migrations/cockroachdb/1_create_table_authentications.up.sql\ndeleted file mode 100644\nindex b3c4c63f..00000000\n--- a/config/migrations/cockroachdb/1_create_table_authentications.up.sql\n+++ /dev/null\n@@ -1,11 +0,0 @@\n-CREATE TABLE IF NOT EXISTS authentications (\n-  id VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  hashed_client_token VARCHAR(255) UNIQUE NOT NULL,\n-  method INTEGER DEFAULT 0 NOT NULL,\n-  metadata TEXT,\n-  expires_at TIMESTAMP,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL\n-);\n-\n-CREATE UNIQUE INDEX hashed_client_token_authentications_index ON authentications (hashed_client_token);\ndiff --git a/config/migrations/cockroachdb/2_create_table_operation_lock.up.sql b/config/migrations/cockroachdb/2_create_table_operation_lock.up.sql\ndeleted file mode 100644\nindex ca9392a1..00000000\n--- a/config/migrations/cockroachdb/2_create_table_operation_lock.up.sql\n+++ /dev/null\n@@ -1,6 +0,0 @@\n-CREATE TABLE IF NOT EXISTS operation_lock (\n-  operation VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  version INTEGER DEFAULT 0 NOT NULL,\n-  last_acquired_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n-  acquired_until TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n-);\ndiff --git a/config/migrations/cockroachdb/3_create_namespaces.up.sql b/config/migrations/cockroachdb/3_create_namespaces.up.sql\ndeleted file mode 100644\nindex ad983dc8..00000000\n--- a/config/migrations/cockroachdb/3_create_namespaces.up.sql\n+++ /dev/null\n@@ -1,12 +0,0 @@\n--- Create namespaces table\n-CREATE TABLE IF NOT EXISTS namespaces (\n-  key VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  name VARCHAR(255) NOT NULL,\n-  description TEXT NOT NULL,\n-  protected BOOLEAN DEFAULT FALSE NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL\n-);\n-\n--- Create default namespace\n-INSERT INTO namespaces (key, name, description, protected) VALUES ('default', 'Default', 'Default namespace', true);\ndiff --git a/config/migrations/cockroachdb/4_namespaces_relationships.up.sql b/config/migrations/cockroachdb/4_namespaces_relationships.up.sql\ndeleted file mode 100644\nindex ec61f74b..00000000\n--- a/config/migrations/cockroachdb/4_namespaces_relationships.up.sql\n+++ /dev/null\n@@ -1,66 +0,0 @@\n--- Flags\n-------------------\n-\n--- Add column namespace_key with a default value\n-ALTER TABLE flags ADD COLUMN namespace_key VARCHAR(255) NOT NULL DEFAULT 'default';\n-\n--- Add foreign key constraint on namespace_key column referencing key column of namespaces table\n-ALTER TABLE flags ADD FOREIGN KEY (namespace_key) REFERENCES namespaces(key) ON DELETE CASCADE;\n-\n--- Drop primary key constraint and add a new composite primary key on namespace_key and key columns\n-ALTER TABLE flags ALTER PRIMARY KEY USING COLUMNS (namespace_key, key);\n-DROP INDEX IF EXISTS flags_key_key CASCADE;\n-\n--- Variants\n-------------------\n-\n--- Add column namespace_key with a default value\n-ALTER TABLE variants ADD COLUMN namespace_key VARCHAR(255) NOT NULL DEFAULT 'default';\n-\n--- Drop previously created unique index\n-DROP INDEX IF EXISTS \"variants_flag_key_key\" CASCADE;\n-\n--- Add unique index on namespace_key, flag_key and key columns\n-ALTER TABLE variants ADD CONSTRAINT \"variants_namespace_flag_key\" UNIQUE (namespace_key, flag_key, key);\n-\n--- Add foreign key constraint on namespace_key column referencing key column of namespaces table\n-ALTER TABLE variants ADD FOREIGN KEY (namespace_key) REFERENCES namespaces(key) ON DELETE CASCADE;\n-\n--- Add foreign key constraint on namespace_key and flag_key columns referencing namespace_key and key columns of flags table\n-ALTER TABLE variants ADD FOREIGN KEY (namespace_key, flag_key) REFERENCES flags(namespace_key, key) ON DELETE CASCADE;\n-\n--- Segments\n-------------------\n-\n--- Add column namespace_key with a default value\n-ALTER TABLE segments ADD COLUMN namespace_key VARCHAR(255) NOT NULL DEFAULT 'default';\n-\n--- Add foreign key constraint on namespace_key column referencing key column of namespaces table\n-ALTER TABLE segments ADD FOREIGN KEY (namespace_key) REFERENCES namespaces(key) ON DELETE CASCADE;\n-\n--- Drop primary key constraint and add a new composite primary key on namespace_key and key columns\n-ALTER TABLE segments ALTER PRIMARY KEY USING COLUMNS (namespace_key, key);\n-DROP INDEX IF EXISTS segments_key_key CASCADE;\n-\n--- Constraints\n-------------------\n-\n--- Add column namespace_key with a default value\n-ALTER TABLE constraints ADD COLUMN namespace_key VARCHAR(255) NOT NULL DEFAULT 'default';\n-\n--- Add foreign key constraint on namespace_key column referencing key column of namespaces table\n-ALTER TABLE constraints ADD FOREIGN KEY (namespace_key) REFERENCES namespaces(key) ON DELETE CASCADE;\n-\n--- Add foreign key constraint on namespace_key and segment_key columns referencing namespace_key and key columns of segments table\n-ALTER TABLE constraints ADD FOREIGN KEY (namespace_key, segment_key) REFERENCES segments(namespace_key, key) ON DELETE CASCADE;\n-\n--- Rules\n-------------------\n-\n--- Add column namespace_key with a default value\n-ALTER TABLE rules ADD COLUMN namespace_key VARCHAR(255) NOT NULL DEFAULT 'default';\n-\n--- Add foreign key constraint on namespace_key column referencing key column of namespaces table\n-ALTER TABLE rules ADD FOREIGN KEY (namespace_key) REFERENCES namespaces(key) ON DELETE CASCADE;\n-ALTER TABLE rules ADD FOREIGN KEY (namespace_key, flag_key) REFERENCES flags(namespace_key, key) ON DELETE CASCADE;\n-ALTER TABLE rules ADD FOREIGN KEY (namespace_key, segment_key) REFERENCES segments(namespace_key, key) ON DELETE CASCADE;\n\\ No newline at end of file\ndiff --git a/config/migrations/cockroachdb/5_constraints_with_description.up.sql b/config/migrations/cockroachdb/5_constraints_with_description.up.sql\ndeleted file mode 100644\nindex 4b77d4c5..00000000\n--- a/config/migrations/cockroachdb/5_constraints_with_description.up.sql\n+++ /dev/null\n@@ -1,2 +0,0 @@\n--- Add description column to constraints\n-ALTER TABLE constraints ADD COLUMN description TEXT;\n\\ No newline at end of file\ndiff --git a/config/migrations/cockroachdb/6_flag_type.up.sql b/config/migrations/cockroachdb/6_flag_type.up.sql\ndeleted file mode 100644\nindex f7f32f1f..00000000\n--- a/config/migrations/cockroachdb/6_flag_type.up.sql\n+++ /dev/null\n@@ -1 +0,0 @@\n-ALTER TABLE flags ADD COLUMN type INTEGER DEFAULT 0 NOT NULL;\n\\ No newline at end of file\ndiff --git a/config/migrations/cockroachdb/7_rollouts.up.sql b/config/migrations/cockroachdb/7_rollouts.up.sql\ndeleted file mode 100644\nindex b09ac832..00000000\n--- a/config/migrations/cockroachdb/7_rollouts.up.sql\n+++ /dev/null\n@@ -1,28 +0,0 @@\n-CREATE TABLE IF NOT EXISTS rollouts (\n-  id VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  namespace_key VARCHAR(255) NOT NULL REFERENCES namespaces ON DELETE CASCADE,\n-  flag_key VARCHAR(255) NOT NULL,\n-  type INTEGER DEFAULT 0 NOT NULL,\n-  description TEXT NOT NULL,\n-  rank INTEGER DEFAULT 1 NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  FOREIGN KEY (namespace_key, flag_key) REFERENCES flags (namespace_key, key) ON DELETE CASCADE\n-);\n-\n-CREATE TABLE IF NOT EXISTS rollout_thresholds (\n-  id VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  namespace_key VARCHAR(255) NOT NULL REFERENCES namespaces ON DELETE CASCADE,\n-  rollout_id VARCHAR(255) UNIQUE NOT NULL REFERENCES rollouts ON DELETE CASCADE,\n-  percentage float DEFAULT 0 NOT NULL,\n-  value BOOLEAN DEFAULT FALSE NOT NULL\n-);\n-\n-CREATE TABLE IF NOT EXISTS rollout_segments (\n-  id VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  namespace_key VARCHAR(255) NOT NULL REFERENCES namespaces ON DELETE CASCADE,\n-  rollout_id VARCHAR(255) NOT NULL REFERENCES rollouts ON DELETE CASCADE,\n-  segment_key VARCHAR(255) NOT NULL,\n-  value BOOLEAN DEFAULT FALSE NOT NULL,\n-  FOREIGN KEY (namespace_key, segment_key) REFERENCES segments (namespace_key, key) ON DELETE CASCADE\n-);\ndiff --git a/config/migrations/cockroachdb/8_segment_anding_tables.up.sql b/config/migrations/cockroachdb/8_segment_anding_tables.up.sql\ndeleted file mode 100644\nindex f974fb7f..00000000\n--- a/config/migrations/cockroachdb/8_segment_anding_tables.up.sql\n+++ /dev/null\n@@ -1,21 +0,0 @@\n--- Rules\n-CREATE TABLE IF NOT EXISTS rule_segments (\n-  rule_id VARCHAR(255) NOT NULL REFERENCES rules ON DELETE CASCADE,\n-  namespace_key VARCHAR(255) NOT NULL,\n-  segment_key VARCHAR(255) NOT NULL,\n-  UNIQUE (rule_id, namespace_key, segment_key),\n-  FOREIGN KEY (namespace_key, segment_key) REFERENCES segments (namespace_key, key) ON DELETE CASCADE\n-);\n-\n-INSERT INTO rule_segments (rule_id, namespace_key, segment_key) SELECT id AS rule_id, namespace_key, segment_key FROM rules;\n-\n--- Rollouts\n-CREATE TABLE IF NOT EXISTS rollout_segment_references (\n-  rollout_segment_id VARCHAR(255) NOT NULL REFERENCES rollout_segments ON DELETE CASCADE,\n-  namespace_key VARCHAR(255) NOT NULL,\n-  segment_key VARCHAR(255) NOT NULL,\n-  UNIQUE (rollout_segment_id, namespace_key, segment_key),\n-  FOREIGN KEY (namespace_key, segment_key) REFERENCES segments (namespace_key, key) ON DELETE CASCADE\n-);\n-\n-INSERT INTO rollout_segment_references (rollout_segment_id, namespace_key, segment_key) SELECT id AS rollout_segment_id, namespace_key, segment_key FROM rollout_segments;\n\\ No newline at end of file\ndiff --git a/config/migrations/cockroachdb/9_alter_rules_rollouts_segments.up.sql b/config/migrations/cockroachdb/9_alter_rules_rollouts_segments.up.sql\ndeleted file mode 100644\nindex 036220bb..00000000\n--- a/config/migrations/cockroachdb/9_alter_rules_rollouts_segments.up.sql\n+++ /dev/null\n@@ -1,15 +0,0 @@\n--- Rules\n-ALTER TABLE IF EXISTS rules DROP CONSTRAINT fk_namespace_key_ref_segments;\n-\n-ALTER TABLE IF EXISTS rules DROP COLUMN segment_key;\n-\n-ALTER TABLE IF EXISTS rules ADD COLUMN segment_operator INTEGER NOT NULL DEFAULT 0;\n-\n--- Rollouts\n-ALTER TABLE IF EXISTS rollout_segments DROP CONSTRAINT fk_namespace_key_ref_segments;\n-ALTER TABLE IF EXISTS rollout_segments DROP CONSTRAINT fk_namespace_key_ref_namespaces;\n-\n-ALTER TABLE IF EXISTS rollout_segments DROP COLUMN segment_key;\n-ALTER TABLE IF EXISTS rollout_segments DROP COLUMN namespace_key;\n-\n-ALTER TABLE IF EXISTS rollout_segments ADD COLUMN segment_operator INTEGER NOT NULL DEFAULT 0;\n\\ No newline at end of file\ndiff --git a/config/migrations/mysql/0_initial.up.sql b/config/migrations/mysql/0_initial.up.sql\ndeleted file mode 100644\nindex 380558b7..00000000\n--- a/config/migrations/mysql/0_initial.up.sql\n+++ /dev/null\n@@ -1,69 +0,0 @@\n-CREATE TABLE IF NOT EXISTS flags (\n-  `key` VARCHAR(255) UNIQUE NOT NULL,\n-  name VARCHAR(255) NOT NULL,\n-  description TEXT NOT NULL,\n-  enabled BOOLEAN DEFAULT FALSE NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL,\n-  PRIMARY KEY (`key`)\n-);\n-\n-CREATE TABLE IF NOT EXISTS segments (\n-  `key` VARCHAR(255) UNIQUE NOT NULL,\n-  name VARCHAR(255) NOT NULL,\n-  description TEXT NOT NULL,\n-  match_type INTEGER DEFAULT 0 NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL,\n-  PRIMARY KEY (`key`)\n-);\n-\n-CREATE TABLE IF NOT EXISTS variants (\n-  id VARCHAR(255) UNIQUE NOT NULL,\n-  flag_key VARCHAR(255) NOT NULL,\n-  `key` VARCHAR(255) NOT NULL,\n-  name VARCHAR(255) NOT NULL,\n-  description TEXT NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL,\n-  PRIMARY KEY (id),\n-  FOREIGN KEY (flag_key) REFERENCES flags (`key`) ON DELETE CASCADE,\n-  CONSTRAINT variants_flag_key_key UNIQUE (flag_key, `key`)\n-);\n-\n-CREATE TABLE IF NOT EXISTS constraints (\n-  id VARCHAR(255) UNIQUE NOT NULL,\n-  segment_key VARCHAR(255) NOT NULL,\n-  type INTEGER DEFAULT 0 NOT NULL,\n-  property VARCHAR(255) NOT NULL,\n-  operator VARCHAR(255) NOT NULL,\n-  value TEXT NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL,\n-  PRIMARY KEY (id),\n-  FOREIGN KEY (segment_key) REFERENCES segments (`key`) ON DELETE CASCADE\n-);\n-\n-CREATE TABLE IF NOT EXISTS rules (\n-  id VARCHAR(255) UNIQUE NOT NULL,\n-  flag_key VARCHAR(255) NOT NULL,\n-  segment_key VARCHAR(255) NOT NULL,\n-  `rank` INTEGER DEFAULT 1 NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL,\n-  PRIMARY KEY (id),\n-  FOREIGN KEY (flag_key) REFERENCES flags (`key`) ON DELETE CASCADE,\n-  FOREIGN KEY (segment_key) REFERENCES segments (`key`) ON DELETE CASCADE\n-);\n-\n-CREATE TABLE IF NOT EXISTS distributions (\n-  id VARCHAR(255) UNIQUE NOT NULL,\n-  rule_id VARCHAR(255) NOT NULL,\n-  variant_id VARCHAR(255) NOT NULL,\n-  rollout float DEFAULT 0 NOT NULL,\n-  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL,\n-  PRIMARY KEY (id),\n-  FOREIGN KEY (rule_id) REFERENCES rules (id) ON DELETE CASCADE,\n-  FOREIGN KEY (variant_id) REFERENCES variants (id) ON DELETE CASCADE\n-);\ndiff --git a/config/migrations/mysql/10_alter_rules_rollout_segments.up.sql b/config/migrations/mysql/10_alter_rules_rollout_segments.up.sql\ndeleted file mode 100644\nindex 55f30f3c..00000000\n--- a/config/migrations/mysql/10_alter_rules_rollout_segments.up.sql\n+++ /dev/null\n@@ -1,15 +0,0 @@\n--- Rules\n-ALTER TABLE rules DROP FOREIGN KEY `rules_ibfk_3`;\n-\n-ALTER TABLE rules DROP COLUMN segment_key;\n-\n-ALTER TABLE rules ADD COLUMN segment_operator INTEGER NOT NULL DEFAULT 0;\n-\n--- Rollouts\n-ALTER TABLE rollout_segments DROP FOREIGN KEY `rollout_segments_ibfk_1`;\n-ALTER TABLE rollout_segments DROP FOREIGN KEY `rollout_segments_ibfk_3`;\n-\n-ALTER TABLE rollout_segments DROP COLUMN segment_key;\n-ALTER TABLE rollout_segments DROP COLUMN namespace_key;\n-\n-ALTER TABLE rollout_segments ADD COLUMN segment_operator INTEGER NOT NULL DEFAULT 0;\n\\ No newline at end of file\ndiff --git a/config/migrations/mysql/11_change_timestamp_precision.up.sql b/config/migrations/mysql/11_change_timestamp_precision.up.sql\ndeleted file mode 100644\nindex 5bab0d35..00000000\n--- a/config/migrations/mysql/11_change_timestamp_precision.up.sql\n+++ /dev/null\n@@ -1,17 +0,0 @@\n-ALTER TABLE flags MODIFY created_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-ALTER TABLE flags MODIFY updated_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-\n-ALTER TABLE segments MODIFY created_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-ALTER TABLE segments MODIFY updated_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-\n-ALTER TABLE variants MODIFY created_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-ALTER TABLE variants MODIFY updated_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-\n-ALTER TABLE constraints MODIFY created_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-ALTER TABLE constraints MODIFY updated_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-\n-ALTER TABLE rules MODIFY created_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-ALTER TABLE rules MODIFY updated_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-\n-ALTER TABLE distributions MODIFY created_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\n-ALTER TABLE distributions MODIFY updated_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL;\ndiff --git a/config/migrations/mysql/12_namespaces_add_state_modified_at.up.sql b/config/migrations/mysql/12_namespaces_add_state_modified_at.up.sql\ndeleted file mode 100644\nindex 1d8bb696..00000000\n--- a/config/migrations/mysql/12_namespaces_add_state_modified_at.up.sql\n+++ /dev/null\n@@ -1 +0,0 @@\n-ALTER TABLE namespaces ADD COLUMN state_modified_at TIMESTAMP;\ndiff --git a/config/migrations/mysql/13_default_variant.up.sql b/config/migrations/mysql/13_default_variant.up.sql\ndeleted file mode 100644\nindex a99b2709..00000000\n--- a/config/migrations/mysql/13_default_variant.up.sql\n+++ /dev/null\n@@ -1 +0,0 @@\n-ALTER TABLE `flags` ADD COLUMN `default_variant_id` VARCHAR(255) REFERENCES variants(`id`) ON DELETE SET NULL;\n\\ No newline at end of file\ndiff --git a/config/migrations/mysql/14_flag_metadata.up.sql b/config/migrations/mysql/14_flag_metadata.up.sql\ndeleted file mode 100644\nindex 19661dc3..00000000\n--- a/config/migrations/mysql/14_flag_metadata.up.sql\n+++ /dev/null\n@@ -1 +0,0 @@\n-ALTER TABLE flags ADD COLUMN metadata JSON AFTER enabled;\ndiff --git a/config/migrations/mysql/1_variants_attachment.up.sql b/config/migrations/mysql/1_variants_attachment.up.sql\ndeleted file mode 100644\nindex 0dfdb9cb..00000000\n--- a/config/migrations/mysql/1_variants_attachment.up.sql\n+++ /dev/null\n@@ -1 +0,0 @@\n-ALTER TABLE variants ADD COLUMN attachment JSON AFTER description;\ndiff --git a/config/migrations/mysql/2_create_table_authentications.up.sql b/config/migrations/mysql/2_create_table_authentications.up.sql\ndeleted file mode 100644\nindex a1b3d50b..00000000\n--- a/config/migrations/mysql/2_create_table_authentications.up.sql\n+++ /dev/null\n@@ -1,12 +0,0 @@\n-CREATE TABLE IF NOT EXISTS authentications (\n-  id VARCHAR(255) UNIQUE NOT NULL,\n-  hashed_client_token VARCHAR(255) UNIQUE NOT NULL,\n-  method INTEGER DEFAULT 0 NOT NULL,\n-  metadata TEXT,\n-  expires_at TIMESTAMP(6),\n-  created_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL,\n-  updated_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL,\n-  PRIMARY KEY (`id`)\n-);\n-\n-CREATE UNIQUE INDEX hashed_client_token_authentications_index ON authentications (hashed_client_token);\ndiff --git a/config/migrations/mysql/3_create_table_operation_lock.up.sql b/config/migrations/mysql/3_create_table_operation_lock.up.sql\ndeleted file mode 100644\nindex 372fb611..00000000\n--- a/config/migrations/mysql/3_create_table_operation_lock.up.sql\n+++ /dev/null\n@@ -1,7 +0,0 @@\n-CREATE TABLE IF NOT EXISTS operation_lock (\n-  operation VARCHAR(255) UNIQUE NOT NULL,\n-  version INTEGER DEFAULT 0 NOT NULL,\n-  last_acquired_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6),\n-  acquired_until TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6),\n-  PRIMARY KEY (`operation`)\n-);\ndiff --git a/config/migrations/mysql/4_create_namespaces.up.sql b/config/migrations/mysql/4_create_namespaces.up.sql\ndeleted file mode 100644\nindex ac2455e3..00000000\n--- a/config/migrations/mysql/4_create_namespaces.up.sql\n+++ /dev/null\n@@ -1,12 +0,0 @@\n--- Create namespaces table\n-CREATE TABLE IF NOT EXISTS namespaces (\n-  `key` VARCHAR(255) PRIMARY KEY UNIQUE NOT NULL,\n-  name VARCHAR(255) NOT NULL,\n-  description TEXT NOT NULL,\n-  protected BOOLEAN DEFAULT FALSE NOT NULL,\n-  created_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL,\n-  updated_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL\n-);\n-\n--- Create default namespace\n-INSERT INTO namespaces (`key`, name, description, protected) VALUES ('default', 'Default', 'Default namespace', true);\n\\ No newline at end of file\ndiff --git a/config/migrations/mysql/5_namespaces_relationships.up.sql b/config/migrations/mysql/5_namespaces_relationships.up.sql\ndeleted file mode 100644\nindex 24c64d8d..00000000\n--- a/config/migrations/mysql/5_namespaces_relationships.up.sql\n+++ /dev/null\n@@ -1,81 +0,0 @@\n--- Drop previously created foreign key\n-ALTER TABLE constraints DROP FOREIGN KEY `constraints_ibfk_1`;\n-ALTER TABLE rules DROP FOREIGN KEY `rules_ibfk_1`;\n-ALTER TABLE rules DROP FOREIGN KEY `rules_ibfk_2`;\n-ALTER TABLE variants DROP FOREIGN KEY `variants_ibfk_1`;\n-\n--- Flags\n-\n--- Add column namespace_key with a default value\n-ALTER TABLE flags ADD COLUMN namespace_key VARCHAR(255) NOT NULL DEFAULT 'default';\n-\n--- Drop previously created unique index\n-ALTER TABLE flags DROP INDEX `key`, ADD INDEX `key` (`key`) USING BTREE;\n-\n--- Drop primary key constraint and add a new composite primary key on namespace_key and key columns\n-ALTER TABLE flags DROP PRIMARY KEY, ADD PRIMARY KEY (`namespace_key`, `key`);\n-\n--- Add foreign key constraint on namespace_key column referencing key column of namespaces table\n-ALTER TABLE flags ADD FOREIGN KEY (namespace_key) REFERENCES namespaces(`key`) ON DELETE CASCADE;\n-\n--- Variants\n-\n--- Add column namespace_key with a default value\n-ALTER TABLE variants ADD COLUMN namespace_key VARCHAR(255) NOT NULL DEFAULT 'default';\n-\n--- Drop previously created foreign key\n-\n--- Drop previously created unique index and add a new unique index on namespace_key, flag_key and key columns\n-ALTER TABLE variants DROP INDEX `variants_flag_key_key`, ADD UNIQUE INDEX `variants_namespace_flag_key` (`namespace_key`, `flag_key`, `key`) USING BTREE;\n-\n--- Add foreign key constraint on namespace_key column referencing key column of namespaces table\n-ALTER TABLE variants ADD FOREIGN KEY (namespace_key) REFERENCES namespaces(`key`) ON DELETE CASCADE;\n-\n--- Add foreign key constraint on namespace_key and flag_key columns referencing namespace_key and key columns of flags table\n-ALTER TABLE variants ADD FOREIGN KEY (namespace_key, flag_key) REFERENCES flags(`namespace_key`, `key`) ON DELETE CASCADE;\n-\n--- Segments\n-\n--- Drop previously created unique index and add a new unique index on namespace_key and key columns\n-ALTER TABLE segments DROP INDEX `key`, ADD INDEX `key` (`key`) USING BTREE;\n-\n--- Add column namespace_key with a default value\n-ALTER TABLE segments ADD COLUMN namespace_key VARCHAR(255) NOT NULL DEFAULT 'default';\n-\n--- Drop primary key constraint and add a new composite primary key on namespace_key and key columns\n-ALTER TABLE segments DROP PRIMARY KEY, ADD PRIMARY KEY (`namespace_key`, `key`);\n-\n--- Add foreign key constraint on namespace_key column referencing key column of namespaces table\n-ALTER TABLE segments ADD FOREIGN KEY (namespace_key) REFERENCES namespaces(`key`) ON DELETE CASCADE;\n-\n--- Constraints\n-\n--- Add column namespace_key with a default value\n-ALTER TABLE constraints ADD COLUMN namespace_key VARCHAR(255) NOT NULL DEFAULT 'default';\n-\n--- Drop previously created index and add a new index on namespace_key and segment_key columns\n-ALTER TABLE constraints DROP INDEX `segment_key`, ADD INDEX `constraints_namespace_segment_key` (`namespace_key`, `segment_key`) USING BTREE;\n-\n--- Add foreign key constraint on namespace_key column referencing key column of namespaces table\n-ALTER TABLE constraints ADD FOREIGN KEY (namespace_key) REFERENCES namespaces(`key`) ON DELETE CASCADE;\n-\n--- Add foreign key constraint on namespace_key and segment_key columns referencing namespace_key and key columns of segments table\n-ALTER TABLE constraints ADD FOREIGN KEY (namespace_key, segment_key) REFERENCES segments(`namespace_key`, `key`) ON DELETE CASCADE;\n-\n--- Rules\n-\n--- Add column namespace_key with a default value\n-ALTER TABLE rules ADD COLUMN namespace_key VARCHAR(255) NOT NULL DEFAULT 'default';\n-\n--- Drop previously created index and add a new index on namespace_key, flag_key and segment_key columns\n-ALTER TABLE rules DROP INDEX `flag_key`, ADD INDEX `rules_namespace_flag_key` (`namespace_key`, `flag_key`) USING BTREE;\n-ALTER TABLE rules DROP INDEX `segment_key`, ADD INDEX `rules_namespace_segment_key` (`namespace_key`, `segment_key`) USING BTREE;\n-\n--- Add foreign key constraint on namespace_key column referencing key column of namespaces table\n-ALTER TABLE rules ADD FOREIGN KEY (namespace_key) REFERENCES namespaces(`key`) ON DELETE CASCADE;\n-\n--- Add foreign key constraint on namespace_key and flag_key columns referencing namespace_key and key columns of flags table\n-ALTER TABLE rules ADD FOREIGN KEY (namespace_key, flag_key) REFERENCES flags(`namespace_key`, `key`) ON DELETE CASCADE;\n-\n--- Add foreign key constraint on namespace_key and segment_key columns referencing namespace_key and key columns of segments table\n-ALTER TABLE rules ADD FOREIGN KEY (namespace_key, segment_key) REFERENCES segments(`namespace_key`, `key`) ON DELETE CASCADE;\ndiff --git a/config/migrations/mysql/6_constraints_with_description.up.sql b/config/migrations/mysql/6_constraints_with_description.up.sql\ndeleted file mode 100644\nindex 4b77d4c5..00000000\n--- a/config/migrations/mysql/6_constraints_with_description.up.sql\n+++ /dev/null\n@@ -1,2 +0,0 @@\n--- Add description column to constraints\n-ALTER TABLE constraints ADD COLUMN description TEXT;\n\\ No newline at end of file\ndiff --git a/config/migrations/mysql/7_flag_type.up.sql b/config/migrations/mysql/7_flag_type.up.sql\ndeleted file mode 100644\nindex 969aa28f..00000000\n--- a/config/migrations/mysql/7_flag_type.up.sql\n+++ /dev/null\n@@ -1 +0,0 @@\n-ALTER TABLE flags ADD COLUMN `type` INTEGER DEFAULT 0 NOT NULL;\n\\ No newline at end of file\ndiff --git a/config/migrations/mysql/8_rollouts.up.sql b/config/migrations/mysql/8_rollouts.up.sql\ndeleted file mode 100644\nindex 1a3cf202..00000000\n--- a/config/migrations/mysql/8_rollouts.up.sql\n+++ /dev/null\n@@ -1,36 +0,0 @@\n-CREATE TABLE IF NOT EXISTS rollouts (\n-  id VARCHAR(255) UNIQUE NOT NULL,\n-  namespace_key VARCHAR(255) NOT NULL,\n-  flag_key VARCHAR(255) NOT NULL,\n-  type INTEGER DEFAULT 0 NOT NULL,\n-  description TEXT NOT NULL,\n-  `rank` INTEGER DEFAULT 1 NOT NULL,\n-  created_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL,\n-  updated_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL,\n-  PRIMARY KEY (id),\n-  FOREIGN KEY (namespace_key) REFERENCES namespaces (`key`) ON DELETE CASCADE,\n-  FOREIGN KEY (namespace_key, flag_key) REFERENCES flags (namespace_key, `key`) ON DELETE CASCADE\n-);\n-\n-CREATE TABLE IF NOT EXISTS rollout_thresholds (\n-  id VARCHAR(255) UNIQUE NOT NULL,\n-  namespace_key VARCHAR(255) NOT NULL,\n-  rollout_id VARCHAR(255) UNIQUE NOT NULL,\n-  percentage float DEFAULT 0 NOT NULL,\n-  value BOOLEAN DEFAULT FALSE NOT NULL,\n-  PRIMARY KEY (id),\n-  FOREIGN KEY (namespace_key) REFERENCES namespaces (`key`) ON DELETE CASCADE,\n-  FOREIGN KEY (rollout_id) REFERENCES rollouts (id) ON DELETE CASCADE\n-);\n-\n-CREATE TABLE IF NOT EXISTS rollout_segments (\n-  id VARCHAR(255) UNIQUE NOT NULL,\n-  namespace_key VARCHAR(255) NOT NULL,\n-  rollout_id VARCHAR(255) NOT NULL,\n-  segment_key VARCHAR(255) NOT NULL,\n-  value BOOLEAN DEFAULT FALSE NOT NULL,\n-  PRIMARY KEY (id),\n-  FOREIGN KEY (namespace_key) REFERENCES namespaces (`key`) ON DELETE CASCADE,\n-  FOREIGN KEY (rollout_id) REFERENCES rollouts (id) ON DELETE CASCADE,\n-  FOREIGN KEY (namespace_key, segment_key) REFERENCES segments (namespace_key, `key`) ON DELETE CASCADE\n-);\ndiff --git a/config/migrations/mysql/9_segment_anding_tables.up.sql b/config/migrations/mysql/9_segment_anding_tables.up.sql\ndeleted file mode 100644\nindex 5eb77470..00000000\n--- a/config/migrations/mysql/9_segment_anding_tables.up.sql\n+++ /dev/null\n@@ -1,23 +0,0 @@\n--- Rules\n-CREATE TABLE IF NOT EXISTS rule_segments (\n-  rule_id VARCHAR(255) NOT NULL,\n-  namespace_key VARCHAR(255) NOT NULL,\n-  segment_key VARCHAR(255) NOT NULL,\n-  CONSTRAINT rule_id_namespace_segment UNIQUE (rule_id, namespace_key, segment_key),\n-  FOREIGN KEY (rule_id) REFERENCES rules (id) ON DELETE CASCADE,\n-  FOREIGN KEY (namespace_key, segment_key) REFERENCES segments (namespace_key, `key`) ON DELETE CASCADE\n-);\n-\n-INSERT INTO rule_segments (rule_id, namespace_key, segment_key) SELECT id AS rule_id, namespace_key, segment_key FROM rules;\n-\n--- Rollouts\n-CREATE TABLE IF NOT EXISTS rollout_segment_references (\n-  rollout_segment_id VARCHAR(255) NOT NULL,\n-  namespace_key VARCHAR(255) NOT NULL,\n-  segment_key VARCHAR(255) NOT NULL,\n-  CONSTRAINT rollout_segment_id_namespace_segment UNIQUE (rollout_segment_id, namespace_key, segment_key),\n-  FOREIGN KEY (rollout_segment_id) REFERENCES rollout_segments (id) ON DELETE CASCADE,\n-  FOREIGN KEY (namespace_key, segment_key) REFERENCES segments (namespace_key, `key`) ON DELETE CASCADE\n-);\n-\n-INSERT INTO rollout_segment_references (rollout_segment_id, namespace_key, segment_key) SELECT id AS rollout_segment_id, namespace_key, segment_key FROM rollout_segments;\n\\ No newline at end of file\ndiff --git a/internal/cmd/grpc.go b/internal/cmd/grpc.go\nindex 5a62452c..30dd5b83 100644\n--- a/internal/cmd/grpc.go\n+++ b/internal/cmd/grpc.go\n@@ -260,7 +260,7 @@ func NewGRPCServer(\n \t\tevalsrv     = evaluation.New(logger, store)\n \t\tevaldatasrv = evaluationdata.New(logger, store)\n \t\thealthsrv   = health.NewServer()\n-\t\tofrepsrv    = ofrep.New(cfg.Cache)\n+\t\tofrepsrv    = ofrep.New(logger, cfg.Cache, evalsrv)\n \t)\n \n \tvar (\ndiff --git a/internal/server/evaluation/ofrep_bridge.go b/internal/server/evaluation/ofrep_bridge.go\nnew file mode 100644\nindex 00000000..5fd066e1\n--- /dev/null\n+++ b/internal/server/evaluation/ofrep_bridge.go\n@@ -0,0 +1,56 @@\n+package evaluation\n+\n+import (\n+\t\"context\"\n+\t\"strconv\"\n+\n+\t\"go.flipt.io/flipt/internal/server/ofrep\"\n+\t\"go.flipt.io/flipt/internal/storage\"\n+\t\"go.flipt.io/flipt/rpc/flipt\"\n+\trpcevaluation \"go.flipt.io/flipt/rpc/flipt/evaluation\"\n+)\n+\n+func (s *Server) OFREPEvaluationBridge(ctx context.Context, input ofrep.EvaluationBridgeInput) (ofrep.EvaluationBridgeOutput, error) {\n+\ttargetingKey := \"\"\n+\tif val, ok := input.Context[\"targetingKey\"]; ok {\n+\t\ttargetingKey = val\n+\t}\n+\n+\tflag, err := s.store.GetFlag(ctx, storage.NewResource(input.NamespaceKey, input.FlagKey))\n+\tif err != nil {\n+\t\treturn ofrep.EvaluationBridgeOutput{}, err\n+\t}\n+\n+\treq := &amp;rpcevaluation.EvaluationRequest{\n+\t\tNamespaceKey: input.NamespaceKey,\n+\t\tFlagKey:      input.FlagKey,\n+\t\tEntityId:     targetingKey,\n+\t\tContext:      input.Context,\n+\t}\n+\n+\tif flag.Type == flipt.FlagType_BOOLEAN_FLAG_TYPE {\n+\t\tresp, err := s.boolean(ctx, flag, req)\n+\t\tif err != nil {\n+\t\t\treturn ofrep.EvaluationBridgeOutput{}, err\n+\t\t}\n+\t\t\n+\t\treturn ofrep.EvaluationBridgeOutput{\n+\t\t\tFlagKey: input.FlagKey,\n+\t\t\tReason:  resp.Reason,\n+\t\t\tVariant: strconv.FormatBool(resp.Enabled),\n+\t\t\tValue:   resp.Enabled,\n+\t\t}, nil\n+\t}\n+\n+\tresp, err := s.variant(ctx, flag, req)\n+\tif err != nil {\n+\t\treturn ofrep.EvaluationBridgeOutput{}, err\n+\t}\n+\t\n+\treturn ofrep.EvaluationBridgeOutput{\n+\t\tFlagKey: input.FlagKey,\n+\t\tReason:  resp.Reason,\n+\t\tVariant: resp.VariantKey,\n+\t\tValue:   resp.VariantKey,\n+\t}, nil\n+}\ndiff --git a/internal/server/ofrep/errors.go b/internal/server/ofrep/errors.go\nnew file mode 100644\nindex 00000000..10020c38\n--- /dev/null\n+++ b/internal/server/ofrep/errors.go\n@@ -0,0 +1,26 @@\n+package ofrep\n+\n+import (\n+\t\"google.golang.org/grpc/codes\"\n+\t\"google.golang.org/grpc/status\"\n+)\n+\n+func NewTargetingKeyMissing() error {\n+\treturn status.Error(codes.InvalidArgument, \"targetingKey is missing\")\n+}\n+\n+func NewBadRequestError(key string, err error) error {\n+\treturn status.Errorf(codes.InvalidArgument, \"bad request for flag %q: %v\", key, err)\n+}\n+\n+func NewFlagNotFoundError(key string) error {\n+\treturn status.Errorf(codes.NotFound, \"flag %q not found\", key)\n+}\n+\n+func NewUnauthenticatedError() error {\n+\treturn status.Error(codes.Unauthenticated, \"unauthenticated\")\n+}\n+\n+func NewUnauthorizedError() error {\n+\treturn status.Error(codes.PermissionDenied, \"unauthorized\")\n+}\ndiff --git a/internal/server/ofrep/evaluation.go b/internal/server/ofrep/evaluation.go\nnew file mode 100644\nindex 00000000..71b42877\n--- /dev/null\n+++ b/internal/server/ofrep/evaluation.go\n@@ -0,0 +1,76 @@\n+package ofrep\n+\n+import (\n+\t\"context\"\n+\n+\tfliperrors \"go.flipt.io/flipt/errors\"\n+\trpcevaluation \"go.flipt.io/flipt/rpc/flipt/evaluation\"\n+\t\"go.flipt.io/flipt/rpc/flipt/ofrep\"\n+\t\"google.golang.org/grpc/metadata\"\n+\t\"google.golang.org/protobuf/types/known/structpb\"\n+    \"go.uber.org/zap\"\n+)\n+\n+func (s *Server) EvaluateFlag(ctx context.Context, r *ofrep.EvaluateFlagRequest) (*ofrep.EvaluatedFlag, error) {\n+\tif r.Key == \"\" {\n+\t\treturn nil, NewTargetingKeyMissing()\n+\t}\n+\n+\tns := \"default\"\n+\tif md, ok := metadata.FromIncomingContext(ctx); ok {\n+\t\tif vals := md.Get(\"x-flipt-namespace\"); len(vals) &gt; 0 {\n+\t\t\tns = vals[0]\n+\t\t}\n+\t}\n+\n+\tinput := EvaluationBridgeInput{\n+\t\tFlagKey:      r.Key,\n+\t\tNamespaceKey: ns,\n+\t\tContext:      r.Context,\n+\t}\n+\n+\tout, err := s.bridge.OFREPEvaluationBridge(ctx, input)\n+\tif err != nil {\n+\t\tif fliperrors.AsMatch[fliperrors.ErrInvalid](err) || fliperrors.AsMatch[fliperrors.ErrValidation](err) {\n+\t\t\treturn nil, NewBadRequestError(r.Key, err)\n+\t\t}\n+\t\tif fliperrors.AsMatch[fliperrors.ErrNotFound](err) {\n+\t\t\treturn nil, NewFlagNotFoundError(r.Key)\n+\t\t}\n+\t\tif fliperrors.AsMatch[fliperrors.ErrUnauthenticated](err) {\n+\t\t\treturn nil, NewUnauthenticatedError()\n+\t\t}\n+\t\tif fliperrors.AsMatch[fliperrors.ErrUnauthorized](err) {\n+\t\t\treturn nil, NewUnauthorizedError()\n+\t\t}\n+\t\treturn nil, err\n+\t}\n+\n+    s.logger.Debug(\"OFREP request\", zap.Any(\"request\", r))\n+    s.logger.Info(\"OFREP EvaluateFlag\", zap.String(\"key\", r.Key), zap.Any(\"outcome\", out.Value))\n+\n+\treason := ofrep.EvaluateReason_UNKNOWN_EVALUATION_REASON\n+\tswitch out.Reason {\n+\tcase rpcevaluation.EvaluationReason_FLAG_DISABLED_EVALUATION_REASON:\n+\t\treason = ofrep.EvaluateReason_DISABLED\n+\tcase rpcevaluation.EvaluationReason_MATCH_EVALUATION_REASON:\n+\t\treason = ofrep.EvaluateReason_TARGETING_MATCH\n+\tcase rpcevaluation.EvaluationReason_DEFAULT_EVALUATION_REASON:\n+\t\treason = ofrep.EvaluateReason_DEFAULT\n+\t}\n+\n+\tvar val *structpb.Value\n+\tif out.Value != nil {\n+\t\tval, _ = structpb.NewValue(out.Value)\n+\t} else if out.Variant == \"\" {\n+        val = structpb.NewStringValue(\"\")\n+    }\n+\n+\treturn &amp;ofrep.EvaluatedFlag{\n+\t\tKey:      r.Key,\n+\t\tReason:   reason,\n+\t\tVariant:  out.Variant,\n+\t\tValue:    val,\n+\t\tMetadata: &amp;structpb.Struct{},\n+\t}, nil\n+}\ndiff --git a/internal/server/ofrep/server.go b/internal/server/ofrep/server.go\nindex 78c69fb4..41d53b7e 100644\n--- a/internal/server/ofrep/server.go\n+++ b/internal/server/ofrep/server.go\n@@ -1,23 +1,47 @@\n package ofrep\n \n import (\n-\t\"go.flipt.io/flipt/internal/config\"\n+\t\"context\"\n \n+\t\"go.flipt.io/flipt/internal/config\"\n+\trpcevaluation \"go.flipt.io/flipt/rpc/flipt/evaluation\"\n \t\"go.flipt.io/flipt/rpc/flipt/ofrep\"\n+\t\"go.uber.org/zap\"\n \t\"google.golang.org/grpc\"\n )\n \n+type EvaluationBridgeInput struct {\n+\tFlagKey      string\n+\tNamespaceKey string\n+\tContext      map[string]string\n+}\n+\n+type EvaluationBridgeOutput struct {\n+\tFlagKey string\n+\tReason  rpcevaluation.EvaluationReason\n+\tVariant string\n+\tValue   any\n+}\n+\n+type Bridge interface {\n+\tOFREPEvaluationBridge(ctx context.Context, input EvaluationBridgeInput) (EvaluationBridgeOutput, error)\n+}\n+\n // Server servers the methods used by the OpenFeature Remote Evaluation Protocol.\n // It will be used only with gRPC Gateway as there's no specification for gRPC itself.\n type Server struct {\n+\tlogger   *zap.Logger\n \tcacheCfg config.CacheConfig\n+\tbridge   Bridge\n \tofrep.UnimplementedOFREPServiceServer\n }\n \n // New constructs a new Server.\n-func New(cacheCfg config.CacheConfig) *Server {\n+func New(logger *zap.Logger, cacheCfg config.CacheConfig, bridge Bridge) *Server {\n \treturn &amp;Server{\n+\t\tlogger:   logger,\n \t\tcacheCfg: cacheCfg,\n+\t\tbridge:   bridge,\n \t}\n }\n \ndiff --git a/rpc/flipt/analytics/analytics.pb.gw.go b/rpc/flipt/analytics/analytics.pb.gw.go\nindex 02772090..21d55647 100644\n--- a/rpc/flipt/analytics/analytics.pb.gw.go\n+++ b/rpc/flipt/analytics/analytics.pb.gw.go\n@@ -125,6 +125,7 @@ func local_request_AnalyticsService_GetFlagEvaluationsCount_0(ctx context.Contex\n // UnaryRPC     :call AnalyticsServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAnalyticsServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterAnalyticsServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AnalyticsServiceServer) error {\n \n \tmux.Handle(\"GET\", pattern_AnalyticsService_GetFlagEvaluationsCount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -190,7 +191,7 @@ func RegisterAnalyticsServiceHandler(ctx context.Context, mux *runtime.ServeMux,\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"AnalyticsServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"AnalyticsServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"AnalyticsServiceClient\" to call the correct interceptors.\n+// \"AnalyticsServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterAnalyticsServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AnalyticsServiceClient) error {\n \n \tmux.Handle(\"GET\", pattern_AnalyticsService_GetFlagEvaluationsCount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\ndiff --git a/rpc/flipt/auth/auth.pb.gw.go b/rpc/flipt/auth/auth.pb.gw.go\nindex d7b0da36..d3e3dc2c 100644\n--- a/rpc/flipt/auth/auth.pb.gw.go\n+++ b/rpc/flipt/auth/auth.pb.gw.go\n@@ -512,6 +512,7 @@ func local_request_AuthenticationMethodGithubService_Callback_0(ctx context.Cont\n // UnaryRPC     :call PublicAuthenticationServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterPublicAuthenticationServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterPublicAuthenticationServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server PublicAuthenticationServiceServer) error {\n \n \tmux.Handle(\"GET\", pattern_PublicAuthenticationService_ListAuthenticationMethods_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -546,6 +547,7 @@ func RegisterPublicAuthenticationServiceHandlerServer(ctx context.Context, mux *\n // UnaryRPC     :call AuthenticationServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAuthenticationServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterAuthenticationServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AuthenticationServiceServer) error {\n \n \tmux.Handle(\"GET\", pattern_AuthenticationService_GetAuthenticationSelf_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -680,6 +682,7 @@ func RegisterAuthenticationServiceHandlerServer(ctx context.Context, mux *runtim\n // UnaryRPC     :call AuthenticationMethodTokenServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAuthenticationMethodTokenServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterAuthenticationMethodTokenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AuthenticationMethodTokenServiceServer) error {\n \n \tmux.Handle(\"POST\", pattern_AuthenticationMethodTokenService_CreateToken_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -714,6 +717,7 @@ func RegisterAuthenticationMethodTokenServiceHandlerServer(ctx context.Context,\n // UnaryRPC     :call AuthenticationMethodOIDCServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAuthenticationMethodOIDCServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterAuthenticationMethodOIDCServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AuthenticationMethodOIDCServiceServer) error {\n \n \tmux.Handle(\"GET\", pattern_AuthenticationMethodOIDCService_AuthorizeURL_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -773,6 +777,7 @@ func RegisterAuthenticationMethodOIDCServiceHandlerServer(ctx context.Context, m\n // UnaryRPC     :call AuthenticationMethodKubernetesServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAuthenticationMethodKubernetesServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterAuthenticationMethodKubernetesServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AuthenticationMethodKubernetesServiceServer) error {\n \n \tmux.Handle(\"POST\", pattern_AuthenticationMethodKubernetesService_VerifyServiceAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -807,6 +812,7 @@ func RegisterAuthenticationMethodKubernetesServiceHandlerServer(ctx context.Cont\n // UnaryRPC     :call AuthenticationMethodGithubServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAuthenticationMethodGithubServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterAuthenticationMethodGithubServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AuthenticationMethodGithubServiceServer) error {\n \n \tmux.Handle(\"GET\", pattern_AuthenticationMethodGithubService_AuthorizeURL_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -897,7 +903,7 @@ func RegisterPublicAuthenticationServiceHandler(ctx context.Context, mux *runtim\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"PublicAuthenticationServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"PublicAuthenticationServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"PublicAuthenticationServiceClient\" to call the correct interceptors.\n+// \"PublicAuthenticationServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterPublicAuthenticationServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client PublicAuthenticationServiceClient) error {\n \n \tmux.Handle(\"GET\", pattern_PublicAuthenticationService_ListAuthenticationMethods_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -968,7 +974,7 @@ func RegisterAuthenticationServiceHandler(ctx context.Context, mux *runtime.Serv\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"AuthenticationServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"AuthenticationServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"AuthenticationServiceClient\" to call the correct interceptors.\n+// \"AuthenticationServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterAuthenticationServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AuthenticationServiceClient) error {\n \n \tmux.Handle(\"GET\", pattern_AuthenticationService_GetAuthenticationSelf_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -1143,7 +1149,7 @@ func RegisterAuthenticationMethodTokenServiceHandler(ctx context.Context, mux *r\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"AuthenticationMethodTokenServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"AuthenticationMethodTokenServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"AuthenticationMethodTokenServiceClient\" to call the correct interceptors.\n+// \"AuthenticationMethodTokenServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterAuthenticationMethodTokenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AuthenticationMethodTokenServiceClient) error {\n \n \tmux.Handle(\"POST\", pattern_AuthenticationMethodTokenService_CreateToken_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -1214,7 +1220,7 @@ func RegisterAuthenticationMethodOIDCServiceHandler(ctx context.Context, mux *ru\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"AuthenticationMethodOIDCServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"AuthenticationMethodOIDCServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"AuthenticationMethodOIDCServiceClient\" to call the correct interceptors.\n+// \"AuthenticationMethodOIDCServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterAuthenticationMethodOIDCServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AuthenticationMethodOIDCServiceClient) error {\n \n \tmux.Handle(\"GET\", pattern_AuthenticationMethodOIDCService_AuthorizeURL_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -1311,7 +1317,7 @@ func RegisterAuthenticationMethodKubernetesServiceHandler(ctx context.Context, m\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"AuthenticationMethodKubernetesServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"AuthenticationMethodKubernetesServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"AuthenticationMethodKubernetesServiceClient\" to call the correct interceptors.\n+// \"AuthenticationMethodKubernetesServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterAuthenticationMethodKubernetesServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AuthenticationMethodKubernetesServiceClient) error {\n \n \tmux.Handle(\"POST\", pattern_AuthenticationMethodKubernetesService_VerifyServiceAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -1382,7 +1388,7 @@ func RegisterAuthenticationMethodGithubServiceHandler(ctx context.Context, mux *\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"AuthenticationMethodGithubServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"AuthenticationMethodGithubServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"AuthenticationMethodGithubServiceClient\" to call the correct interceptors.\n+// \"AuthenticationMethodGithubServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterAuthenticationMethodGithubServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AuthenticationMethodGithubServiceClient) error {\n \n \tmux.Handle(\"GET\", pattern_AuthenticationMethodGithubService_AuthorizeURL_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\ndiff --git a/rpc/flipt/evaluation/evaluation.pb.gw.go b/rpc/flipt/evaluation/evaluation.pb.gw.go\nindex 010f8780..7b622059 100644\n--- a/rpc/flipt/evaluation/evaluation.pb.gw.go\n+++ b/rpc/flipt/evaluation/evaluation.pb.gw.go\n@@ -183,6 +183,7 @@ func local_request_DataService_EvaluationSnapshotNamespace_0(ctx context.Context\n // UnaryRPC     :call EvaluationServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterEvaluationServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterEvaluationServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server EvaluationServiceServer) error {\n \n \tmux.Handle(\"POST\", pattern_EvaluationService_Boolean_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -267,6 +268,7 @@ func RegisterEvaluationServiceHandlerServer(ctx context.Context, mux *runtime.Se\n // UnaryRPC     :call DataServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterDataServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterDataServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server DataServiceServer) error {\n \n \tmux.Handle(\"GET\", pattern_DataService_EvaluationSnapshotNamespace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -332,7 +334,7 @@ func RegisterEvaluationServiceHandler(ctx context.Context, mux *runtime.ServeMux\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"EvaluationServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"EvaluationServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"EvaluationServiceClient\" to call the correct interceptors.\n+// \"EvaluationServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterEvaluationServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client EvaluationServiceClient) error {\n \n \tmux.Handle(\"POST\", pattern_EvaluationService_Boolean_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -455,7 +457,7 @@ func RegisterDataServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"DataServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"DataServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"DataServiceClient\" to call the correct interceptors.\n+// \"DataServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterDataServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client DataServiceClient) error {\n \n \tmux.Handle(\"GET\", pattern_DataService_EvaluationSnapshotNamespace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\ndiff --git a/rpc/flipt/flipt.pb.gw.go b/rpc/flipt/flipt.pb.gw.go\nindex c2378ba2..24aadfd1 100644\n--- a/rpc/flipt/flipt.pb.gw.go\n+++ b/rpc/flipt/flipt.pb.gw.go\n@@ -4917,6 +4917,7 @@ func local_request_Flipt_DeleteConstraint_1(ctx context.Context, marshaler runti\n // UnaryRPC     :call FliptServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterFliptHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterFliptHandlerServer(ctx context.Context, mux *runtime.ServeMux, server FliptServer) error {\n \n \tmux.Handle(\"POST\", pattern_Flipt_Evaluate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -6582,7 +6583,7 @@ func RegisterFliptHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"FliptClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"FliptClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"FliptClient\" to call the correct interceptors.\n+// \"FliptClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterFliptHandlerClient(ctx context.Context, mux *runtime.ServeMux, client FliptClient) error {\n \n \tmux.Handle(\"POST\", pattern_Flipt_Evaluate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\ndiff --git a/rpc/flipt/meta/meta.pb.gw.go b/rpc/flipt/meta/meta.pb.gw.go\nindex d0fe385b..55d77d1a 100644\n--- a/rpc/flipt/meta/meta.pb.gw.go\n+++ b/rpc/flipt/meta/meta.pb.gw.go\n@@ -72,6 +72,7 @@ func local_request_MetadataService_GetInfo_0(ctx context.Context, marshaler runt\n // UnaryRPC     :call MetadataServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterMetadataServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterMetadataServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server MetadataServiceServer) error {\n \n \tmux.Handle(\"GET\", pattern_MetadataService_GetConfiguration_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -162,7 +163,7 @@ func RegisterMetadataServiceHandler(ctx context.Context, mux *runtime.ServeMux,\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"MetadataServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"MetadataServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"MetadataServiceClient\" to call the correct interceptors.\n+// \"MetadataServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterMetadataServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client MetadataServiceClient) error {\n \n \tmux.Handle(\"GET\", pattern_MetadataService_GetConfiguration_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\ndiff --git a/rpc/flipt/ofrep/ofrep.pb.go b/rpc/flipt/ofrep/ofrep.pb.go\nindex dba3b0d0..902b81ac 100644\n--- a/rpc/flipt/ofrep/ofrep.pb.go\n+++ b/rpc/flipt/ofrep/ofrep.pb.go\n@@ -9,6 +9,7 @@ package ofrep\n import (\n \tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n \tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n+\tstructpb \"google.golang.org/protobuf/types/known/structpb\"\n \treflect \"reflect\"\n \tsync \"sync\"\n )\n@@ -20,6 +21,192 @@ const (\n \t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n )\n \n+type EvaluateReason int32\n+\n+const (\n+\tEvaluateReason_UNKNOWN_EVALUATION_REASON EvaluateReason = 0\n+\tEvaluateReason_DISABLED                  EvaluateReason = 1\n+\tEvaluateReason_TARGETING_MATCH           EvaluateReason = 2\n+\tEvaluateReason_DEFAULT                   EvaluateReason = 3\n+)\n+\n+// Enum value maps for EvaluateReason.\n+var (\n+\tEvaluateReason_name = map[int32]string{\n+\t\t0: \"UNKNOWN_EVALUATION_REASON\",\n+\t\t1: \"DISABLED\",\n+\t\t2: \"TARGETING_MATCH\",\n+\t\t3: \"DEFAULT\",\n+\t}\n+\tEvaluateReason_value = map[string]int32{\n+\t\t\"UNKNOWN_EVALUATION_REASON\": 0,\n+\t\t\"DISABLED\":                  1,\n+\t\t\"TARGETING_MATCH\":           2,\n+\t\t\"DEFAULT\":                   3,\n+\t}\n+)\n+\n+func (x EvaluateReason) Enum() *EvaluateReason {\n+\tp := new(EvaluateReason)\n+\t*p = x\n+\treturn p\n+}\n+\n+func (x EvaluateReason) String() string {\n+\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n+}\n+\n+func (EvaluateReason) Descriptor() protoreflect.EnumDescriptor {\n+\treturn file_ofrep_ofrep_proto_enumTypes[0].Descriptor()\n+}\n+\n+func (EvaluateReason) Type() protoreflect.EnumType {\n+\treturn &amp;file_ofrep_ofrep_proto_enumTypes[0]\n+}\n+\n+func (x EvaluateReason) Number() protoreflect.EnumNumber {\n+\treturn protoreflect.EnumNumber(x)\n+}\n+\n+// Deprecated: Use EvaluateReason.Descriptor instead.\n+func (EvaluateReason) EnumDescriptor() ([]byte, []int) {\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{0}\n+}\n+\n+type EvaluateFlagRequest struct {\n+\tstate         protoimpl.MessageState\n+\tsizeCache     protoimpl.SizeCache\n+\tunknownFields protoimpl.UnknownFields\n+\n+\tKey     string            `protobuf:\"bytes,1,opt,name=key,proto3\" json:\"key,omitempty\"`\n+\tContext map[string]string `protobuf:\"bytes,2,rep,name=context,proto3\" json:\"context,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"bytes,2,opt,name=value,proto3\"`\n+}\n+\n+func (x *EvaluateFlagRequest) Reset() {\n+\t*x = EvaluateFlagRequest{}\n+\tif protoimpl.UnsafeEnabled {\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[0]\n+\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n+\t\tms.StoreMessageInfo(mi)\n+\t}\n+}\n+\n+func (x *EvaluateFlagRequest) String() string {\n+\treturn protoimpl.X.MessageStringOf(x)\n+}\n+\n+func (*EvaluateFlagRequest) ProtoMessage() {}\n+\n+func (x *EvaluateFlagRequest) ProtoReflect() protoreflect.Message {\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[0]\n+\tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n+\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n+\t\tif ms.LoadMessageInfo() == nil {\n+\t\t\tms.StoreMessageInfo(mi)\n+\t\t}\n+\t\treturn ms\n+\t}\n+\treturn mi.MessageOf(x)\n+}\n+\n+// Deprecated: Use EvaluateFlagRequest.ProtoReflect.Descriptor instead.\n+func (*EvaluateFlagRequest) Descriptor() ([]byte, []int) {\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{0}\n+}\n+\n+func (x *EvaluateFlagRequest) GetKey() string {\n+\tif x != nil {\n+\t\treturn x.Key\n+\t}\n+\treturn \"\"\n+}\n+\n+func (x *EvaluateFlagRequest) GetContext() map[string]string {\n+\tif x != nil {\n+\t\treturn x.Context\n+\t}\n+\treturn nil\n+}\n+\n+type EvaluatedFlag struct {\n+\tstate         protoimpl.MessageState\n+\tsizeCache     protoimpl.SizeCache\n+\tunknownFields protoimpl.UnknownFields\n+\n+\tKey      string           `protobuf:\"bytes,1,opt,name=key,proto3\" json:\"key,omitempty\"`\n+\tReason   EvaluateReason   `protobuf:\"varint,2,opt,name=reason,proto3,enum=flipt.ofrep.EvaluateReason\" json:\"reason,omitempty\"`\n+\tVariant  string           `protobuf:\"bytes,3,opt,name=variant,proto3\" json:\"variant,omitempty\"`\n+\tMetadata *structpb.Struct `protobuf:\"bytes,4,opt,name=metadata,proto3\" json:\"metadata,omitempty\"`\n+\tValue    *structpb.Value  `protobuf:\"bytes,5,opt,name=value,proto3\" json:\"value,omitempty\"`\n+}\n+\n+func (x *EvaluatedFlag) Reset() {\n+\t*x = EvaluatedFlag{}\n+\tif protoimpl.UnsafeEnabled {\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[1]\n+\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n+\t\tms.StoreMessageInfo(mi)\n+\t}\n+}\n+\n+func (x *EvaluatedFlag) String() string {\n+\treturn protoimpl.X.MessageStringOf(x)\n+}\n+\n+func (*EvaluatedFlag) ProtoMessage() {}\n+\n+func (x *EvaluatedFlag) ProtoReflect() protoreflect.Message {\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[1]\n+\tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n+\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n+\t\tif ms.LoadMessageInfo() == nil {\n+\t\t\tms.StoreMessageInfo(mi)\n+\t\t}\n+\t\treturn ms\n+\t}\n+\treturn mi.MessageOf(x)\n+}\n+\n+// Deprecated: Use EvaluatedFlag.ProtoReflect.Descriptor instead.\n+func (*EvaluatedFlag) Descriptor() ([]byte, []int) {\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{1}\n+}\n+\n+func (x *EvaluatedFlag) GetKey() string {\n+\tif x != nil {\n+\t\treturn x.Key\n+\t}\n+\treturn \"\"\n+}\n+\n+func (x *EvaluatedFlag) GetReason() EvaluateReason {\n+\tif x != nil {\n+\t\treturn x.Reason\n+\t}\n+\treturn EvaluateReason_UNKNOWN_EVALUATION_REASON\n+}\n+\n+func (x *EvaluatedFlag) GetVariant() string {\n+\tif x != nil {\n+\t\treturn x.Variant\n+\t}\n+\treturn \"\"\n+}\n+\n+func (x *EvaluatedFlag) GetMetadata() *structpb.Struct {\n+\tif x != nil {\n+\t\treturn x.Metadata\n+\t}\n+\treturn nil\n+}\n+\n+func (x *EvaluatedFlag) GetValue() *structpb.Value {\n+\tif x != nil {\n+\t\treturn x.Value\n+\t}\n+\treturn nil\n+}\n+\n type GetProviderConfigurationRequest struct {\n \tstate         protoimpl.MessageState\n \tsizeCache     protoimpl.SizeCache\n@@ -29,7 +216,7 @@ type GetProviderConfigurationRequest struct {\n func (x *GetProviderConfigurationRequest) Reset() {\n \t*x = GetProviderConfigurationRequest{}\n \tif protoimpl.UnsafeEnabled {\n-\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[0]\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[2]\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tms.StoreMessageInfo(mi)\n \t}\n@@ -42,7 +229,7 @@ func (x *GetProviderConfigurationRequest) String() string {\n func (*GetProviderConfigurationRequest) ProtoMessage() {}\n \n func (x *GetProviderConfigurationRequest) ProtoReflect() protoreflect.Message {\n-\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[0]\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[2]\n \tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tif ms.LoadMessageInfo() == nil {\n@@ -55,7 +242,7 @@ func (x *GetProviderConfigurationRequest) ProtoReflect() protoreflect.Message {\n \n // Deprecated: Use GetProviderConfigurationRequest.ProtoReflect.Descriptor instead.\n func (*GetProviderConfigurationRequest) Descriptor() ([]byte, []int) {\n-\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{0}\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{2}\n }\n \n type GetProviderConfigurationResponse struct {\n@@ -70,7 +257,7 @@ type GetProviderConfigurationResponse struct {\n func (x *GetProviderConfigurationResponse) Reset() {\n \t*x = GetProviderConfigurationResponse{}\n \tif protoimpl.UnsafeEnabled {\n-\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[1]\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[3]\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tms.StoreMessageInfo(mi)\n \t}\n@@ -83,7 +270,7 @@ func (x *GetProviderConfigurationResponse) String() string {\n func (*GetProviderConfigurationResponse) ProtoMessage() {}\n \n func (x *GetProviderConfigurationResponse) ProtoReflect() protoreflect.Message {\n-\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[1]\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[3]\n \tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tif ms.LoadMessageInfo() == nil {\n@@ -96,7 +283,7 @@ func (x *GetProviderConfigurationResponse) ProtoReflect() protoreflect.Message {\n \n // Deprecated: Use GetProviderConfigurationResponse.ProtoReflect.Descriptor instead.\n func (*GetProviderConfigurationResponse) Descriptor() ([]byte, []int) {\n-\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{1}\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{3}\n }\n \n func (x *GetProviderConfigurationResponse) GetName() string {\n@@ -125,7 +312,7 @@ type Capabilities struct {\n func (x *Capabilities) Reset() {\n \t*x = Capabilities{}\n \tif protoimpl.UnsafeEnabled {\n-\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[2]\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[4]\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tms.StoreMessageInfo(mi)\n \t}\n@@ -138,7 +325,7 @@ func (x *Capabilities) String() string {\n func (*Capabilities) ProtoMessage() {}\n \n func (x *Capabilities) ProtoReflect() protoreflect.Message {\n-\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[2]\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[4]\n \tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tif ms.LoadMessageInfo() == nil {\n@@ -151,7 +338,7 @@ func (x *Capabilities) ProtoReflect() protoreflect.Message {\n \n // Deprecated: Use Capabilities.ProtoReflect.Descriptor instead.\n func (*Capabilities) Descriptor() ([]byte, []int) {\n-\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{2}\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{4}\n }\n \n func (x *Capabilities) GetCacheInvalidation() *CacheInvalidation {\n@@ -179,7 +366,7 @@ type CacheInvalidation struct {\n func (x *CacheInvalidation) Reset() {\n \t*x = CacheInvalidation{}\n \tif protoimpl.UnsafeEnabled {\n-\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[3]\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[5]\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tms.StoreMessageInfo(mi)\n \t}\n@@ -192,7 +379,7 @@ func (x *CacheInvalidation) String() string {\n func (*CacheInvalidation) ProtoMessage() {}\n \n func (x *CacheInvalidation) ProtoReflect() protoreflect.Message {\n-\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[3]\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[5]\n \tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tif ms.LoadMessageInfo() == nil {\n@@ -205,7 +392,7 @@ func (x *CacheInvalidation) ProtoReflect() protoreflect.Message {\n \n // Deprecated: Use CacheInvalidation.ProtoReflect.Descriptor instead.\n func (*CacheInvalidation) Descriptor() ([]byte, []int) {\n-\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{3}\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{5}\n }\n \n func (x *CacheInvalidation) GetPolling() *Polling {\n@@ -227,7 +414,7 @@ type Polling struct {\n func (x *Polling) Reset() {\n \t*x = Polling{}\n \tif protoimpl.UnsafeEnabled {\n-\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[4]\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[6]\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tms.StoreMessageInfo(mi)\n \t}\n@@ -240,7 +427,7 @@ func (x *Polling) String() string {\n func (*Polling) ProtoMessage() {}\n \n func (x *Polling) ProtoReflect() protoreflect.Message {\n-\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[4]\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[6]\n \tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tif ms.LoadMessageInfo() == nil {\n@@ -253,7 +440,7 @@ func (x *Polling) ProtoReflect() protoreflect.Message {\n \n // Deprecated: Use Polling.ProtoReflect.Descriptor instead.\n func (*Polling) Descriptor() ([]byte, []int) {\n-\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{4}\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{6}\n }\n \n func (x *Polling) GetEnabled() bool {\n@@ -281,7 +468,7 @@ type FlagEvaluation struct {\n func (x *FlagEvaluation) Reset() {\n \t*x = FlagEvaluation{}\n \tif protoimpl.UnsafeEnabled {\n-\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[5]\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[7]\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tms.StoreMessageInfo(mi)\n \t}\n@@ -294,7 +481,7 @@ func (x *FlagEvaluation) String() string {\n func (*FlagEvaluation) ProtoMessage() {}\n \n func (x *FlagEvaluation) ProtoReflect() protoreflect.Message {\n-\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[5]\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[7]\n \tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tif ms.LoadMessageInfo() == nil {\n@@ -307,7 +494,7 @@ func (x *FlagEvaluation) ProtoReflect() protoreflect.Message {\n \n // Deprecated: Use FlagEvaluation.ProtoReflect.Descriptor instead.\n func (*FlagEvaluation) Descriptor() ([]byte, []int) {\n-\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{5}\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{7}\n }\n \n func (x *FlagEvaluation) GetSupportedTypes() []string {\n@@ -322,52 +509,89 @@ var File_ofrep_ofrep_proto protoreflect.FileDescriptor\n var file_ofrep_ofrep_proto_rawDesc = []byte{\n \t0x0a, 0x11, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2f, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x70, 0x72,\n \t0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70,\n-\t0x22, 0x21, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43,\n-\t0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,\n-\t0x65, 0x73, 0x74, 0x22, 0x75, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64,\n+\t0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,\n+\t0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xac,\n+\t0x01, 0x0a, 0x13, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52,\n+\t0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,\n+\t0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x47, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74,\n+\t0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x66, 0x6c, 0x69, 0x70,\n+\t0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65,\n+\t0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74,\n+\t0x65, 0x78, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,\n+\t0x74, 0x1a, 0x3a, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x74, 0x72,\n+\t0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,\n+\t0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,\n+\t0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd3, 0x01,\n+\t0x0a, 0x0d, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x61, 0x67, 0x12,\n+\t0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,\n+\t0x79, 0x12, 0x33, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,\n+\t0x0e, 0x32, 0x1b, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e,\n+\t0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x06,\n+\t0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e,\n+\t0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74,\n+\t0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01,\n+\t0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n+\t0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x74,\n+\t0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05,\n+\t0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,\n+\t0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61,\n+\t0x6c, 0x75, 0x65, 0x22, 0x21, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64,\n \t0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,\n-\t0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,\n-\t0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x63,\n-\t0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28,\n-\t0x0b, 0x32, 0x19, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e,\n-\t0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x0c, 0x63, 0x61,\n-\t0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xa3, 0x01, 0x0a, 0x0c, 0x43,\n-\t0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x12, 0x63,\n-\t0x61, 0x63, 0x68, 0x65, 0x5f, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f,\n-\t0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e,\n-\t0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e, 0x76, 0x61, 0x6c,\n-\t0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x63, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e,\n-\t0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x0f, 0x66, 0x6c,\n-\t0x61, 0x67, 0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20,\n-\t0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65,\n-\t0x70, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n-\t0x52, 0x0e, 0x66, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n-\t0x22, 0x43, 0x0a, 0x11, 0x43, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64,\n-\t0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x70, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67,\n-\t0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f,\n-\t0x66, 0x72, 0x65, 0x70, 0x2e, 0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x70, 0x6f,\n-\t0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x22, 0x5a, 0x0a, 0x07, 0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67,\n-\t0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,\n-\t0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x6d, 0x69,\n-\t0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76,\n-\t0x61, 0x6c, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x6d, 0x69, 0x6e,\n-\t0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4d,\n-\t0x73, 0x22, 0x39, 0x0a, 0x0e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74,\n-\t0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64,\n-\t0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x75,\n-\t0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x73, 0x32, 0x89, 0x01, 0x0a,\n-\t0x0c, 0x4f, 0x46, 0x52, 0x45, 0x50, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x79, 0x0a,\n-\t0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66,\n-\t0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x66, 0x6c, 0x69, 0x70,\n-\t0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69,\n-\t0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n-\t0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e,\n-\t0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65,\n-\t0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,\n-\t0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x23, 0x5a, 0x21, 0x67, 0x6f, 0x2e, 0x66,\n-\t0x6c, 0x69, 0x70, 0x74, 0x2e, 0x69, 0x6f, 0x2f, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2f, 0x72, 0x70,\n-\t0x63, 0x2f, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2f, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x62, 0x06, 0x70,\n-\t0x72, 0x6f, 0x74, 0x6f, 0x33,\n+\t0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x75, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f,\n+\t0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69,\n+\t0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,\n+\t0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d,\n+\t0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02,\n+\t0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72,\n+\t0x65, 0x70, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52,\n+\t0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xa3, 0x01,\n+\t0x0a, 0x0c, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x4d,\n+\t0x0a, 0x12, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61,\n+\t0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x69,\n+\t0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e,\n+\t0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x63, 0x61, 0x63, 0x68,\n+\t0x65, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a,\n+\t0x0f, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n+\t0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f,\n+\t0x66, 0x72, 0x65, 0x70, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74,\n+\t0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x66, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74,\n+\t0x69, 0x6f, 0x6e, 0x22, 0x43, 0x0a, 0x11, 0x43, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e, 0x76, 0x61,\n+\t0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x70, 0x6f, 0x6c, 0x6c,\n+\t0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x66, 0x6c, 0x69, 0x70,\n+\t0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52,\n+\t0x07, 0x70, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x22, 0x5a, 0x0a, 0x07, 0x50, 0x6f, 0x6c, 0x6c,\n+\t0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01,\n+\t0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x35, 0x0a,\n+\t0x17, 0x6d, 0x69, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x74,\n+\t0x65, 0x72, 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14,\n+\t0x6d, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76,\n+\t0x61, 0x6c, 0x4d, 0x73, 0x22, 0x39, 0x0a, 0x0e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c,\n+\t0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72,\n+\t0x74, 0x65, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52,\n+\t0x0e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2a,\n+\t0x5f, 0x0a, 0x0e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f,\n+\t0x6e, 0x12, 0x1d, 0x0a, 0x19, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x45, 0x56, 0x41,\n+\t0x4c, 0x55, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x10, 0x00,\n+\t0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x13,\n+\t0x0a, 0x0f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x41, 0x54, 0x43,\n+\t0x48, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x03,\n+\t0x32, 0xd9, 0x01, 0x0a, 0x0c, 0x4f, 0x46, 0x52, 0x45, 0x50, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,\n+\t0x65, 0x12, 0x4e, 0x0a, 0x0c, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61,\n+\t0x67, 0x12, 0x20, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e,\n+\t0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75,\n+\t0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65,\n+\t0x70, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x61, 0x67, 0x22,\n+\t0x00, 0x12, 0x79, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72,\n+\t0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e,\n+\t0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x50,\n+\t0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61,\n+\t0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x66, 0x6c,\n+\t0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f,\n+\t0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69,\n+\t0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x23, 0x5a, 0x21,\n+\t0x67, 0x6f, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x69, 0x6f, 0x2f, 0x66, 0x6c, 0x69, 0x70,\n+\t0x74, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2f, 0x6f, 0x66, 0x72, 0x65,\n+\t0x70, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n }\n \n var (\n@@ -382,27 +606,40 @@ func file_ofrep_ofrep_proto_rawDescGZIP() []byte {\n \treturn file_ofrep_ofrep_proto_rawDescData\n }\n \n-var file_ofrep_ofrep_proto_msgTypes = make([]protoimpl.MessageInfo, 6)\n+var file_ofrep_ofrep_proto_enumTypes = make([]protoimpl.EnumInfo, 1)\n+var file_ofrep_ofrep_proto_msgTypes = make([]protoimpl.MessageInfo, 9)\n var file_ofrep_ofrep_proto_goTypes = []any{\n-\t(*GetProviderConfigurationRequest)(nil),  // 0: flipt.ofrep.GetProviderConfigurationRequest\n-\t(*GetProviderConfigurationResponse)(nil), // 1: flipt.ofrep.GetProviderConfigurationResponse\n-\t(*Capabilities)(nil),                     // 2: flipt.ofrep.Capabilities\n-\t(*CacheInvalidation)(nil),                // 3: flipt.ofrep.CacheInvalidation\n-\t(*Polling)(nil),                          // 4: flipt.ofrep.Polling\n-\t(*FlagEvaluation)(nil),                   // 5: flipt.ofrep.FlagEvaluation\n+\t(EvaluateReason)(0),                      // 0: flipt.ofrep.EvaluateReason\n+\t(*EvaluateFlagRequest)(nil),              // 1: flipt.ofrep.EvaluateFlagRequest\n+\t(*EvaluatedFlag)(nil),                    // 2: flipt.ofrep.EvaluatedFlag\n+\t(*GetProviderConfigurationRequest)(nil),  // 3: flipt.ofrep.GetProviderConfigurationRequest\n+\t(*GetProviderConfigurationResponse)(nil), // 4: flipt.ofrep.GetProviderConfigurationResponse\n+\t(*Capabilities)(nil),                     // 5: flipt.ofrep.Capabilities\n+\t(*CacheInvalidation)(nil),                // 6: flipt.ofrep.CacheInvalidation\n+\t(*Polling)(nil),                          // 7: flipt.ofrep.Polling\n+\t(*FlagEvaluation)(nil),                   // 8: flipt.ofrep.FlagEvaluation\n+\tnil,                                      // 9: flipt.ofrep.EvaluateFlagRequest.ContextEntry\n+\t(*structpb.Struct)(nil),                  // 10: google.protobuf.Struct\n+\t(*structpb.Value)(nil),                   // 11: google.protobuf.Value\n }\n var file_ofrep_ofrep_proto_depIdxs = []int32{\n-\t2, // 0: flipt.ofrep.GetProviderConfigurationResponse.capabilities:type_name -&gt; flipt.ofrep.Capabilities\n-\t3, // 1: flipt.ofrep.Capabilities.cache_invalidation:type_name -&gt; flipt.ofrep.CacheInvalidation\n-\t5, // 2: flipt.ofrep.Capabilities.flag_evaluation:type_name -&gt; flipt.ofrep.FlagEvaluation\n-\t4, // 3: flipt.ofrep.CacheInvalidation.polling:type_name -&gt; flipt.ofrep.Polling\n-\t0, // 4: flipt.ofrep.OFREPService.GetProviderConfiguration:input_type -&gt; flipt.ofrep.GetProviderConfigurationRequest\n-\t1, // 5: flipt.ofrep.OFREPService.GetProviderConfiguration:output_type -&gt; flipt.ofrep.GetProviderConfigurationResponse\n-\t5, // [5:6] is the sub-list for method output_type\n-\t4, // [4:5] is the sub-list for method input_type\n-\t4, // [4:4] is the sub-list for extension type_name\n-\t4, // [4:4] is the sub-list for extension extendee\n-\t0, // [0:4] is the sub-list for field type_name\n+\t9,  // 0: flipt.ofrep.EvaluateFlagRequest.context:type_name -&gt; flipt.ofrep.EvaluateFlagRequest.ContextEntry\n+\t0,  // 1: flipt.ofrep.EvaluatedFlag.reason:type_name -&gt; flipt.ofrep.EvaluateReason\n+\t10, // 2: flipt.ofrep.EvaluatedFlag.metadata:type_name -&gt; google.protobuf.Struct\n+\t11, // 3: flipt.ofrep.EvaluatedFlag.value:type_name -&gt; google.protobuf.Value\n+\t5,  // 4: flipt.ofrep.GetProviderConfigurationResponse.capabilities:type_name -&gt; flipt.ofrep.Capabilities\n+\t6,  // 5: flipt.ofrep.Capabilities.cache_invalidation:type_name -&gt; flipt.ofrep.CacheInvalidation\n+\t8,  // 6: flipt.ofrep.Capabilities.flag_evaluation:type_name -&gt; flipt.ofrep.FlagEvaluation\n+\t7,  // 7: flipt.ofrep.CacheInvalidation.polling:type_name -&gt; flipt.ofrep.Polling\n+\t1,  // 8: flipt.ofrep.OFREPService.EvaluateFlag:input_type -&gt; flipt.ofrep.EvaluateFlagRequest\n+\t3,  // 9: flipt.ofrep.OFREPService.GetProviderConfiguration:input_type -&gt; flipt.ofrep.GetProviderConfigurationRequest\n+\t2,  // 10: flipt.ofrep.OFREPService.EvaluateFlag:output_type -&gt; flipt.ofrep.EvaluatedFlag\n+\t4,  // 11: flipt.ofrep.OFREPService.GetProviderConfiguration:output_type -&gt; flipt.ofrep.GetProviderConfigurationResponse\n+\t10, // [10:12] is the sub-list for method output_type\n+\t8,  // [8:10] is the sub-list for method input_type\n+\t8,  // [8:8] is the sub-list for extension type_name\n+\t8,  // [8:8] is the sub-list for extension extendee\n+\t0,  // [0:8] is the sub-list for field type_name\n }\n \n func init() { file_ofrep_ofrep_proto_init() }\n@@ -412,7 +649,7 @@ func file_ofrep_ofrep_proto_init() {\n \t}\n \tif !protoimpl.UnsafeEnabled {\n \t\tfile_ofrep_ofrep_proto_msgTypes[0].Exporter = func(v any, i int) any {\n-\t\t\tswitch v := v.(*GetProviderConfigurationRequest); i {\n+\t\t\tswitch v := v.(*EvaluateFlagRequest); i {\n \t\t\tcase 0:\n \t\t\t\treturn &amp;v.state\n \t\t\tcase 1:\n@@ -424,7 +661,7 @@ func file_ofrep_ofrep_proto_init() {\n \t\t\t}\n \t\t}\n \t\tfile_ofrep_ofrep_proto_msgTypes[1].Exporter = func(v any, i int) any {\n-\t\t\tswitch v := v.(*GetProviderConfigurationResponse); i {\n+\t\t\tswitch v := v.(*EvaluatedFlag); i {\n \t\t\tcase 0:\n \t\t\t\treturn &amp;v.state\n \t\t\tcase 1:\n@@ -436,7 +673,7 @@ func file_ofrep_ofrep_proto_init() {\n \t\t\t}\n \t\t}\n \t\tfile_ofrep_ofrep_proto_msgTypes[2].Exporter = func(v any, i int) any {\n-\t\t\tswitch v := v.(*Capabilities); i {\n+\t\t\tswitch v := v.(*GetProviderConfigurationRequest); i {\n \t\t\tcase 0:\n \t\t\t\treturn &amp;v.state\n \t\t\tcase 1:\n@@ -448,7 +685,7 @@ func file_ofrep_ofrep_proto_init() {\n \t\t\t}\n \t\t}\n \t\tfile_ofrep_ofrep_proto_msgTypes[3].Exporter = func(v any, i int) any {\n-\t\t\tswitch v := v.(*CacheInvalidation); i {\n+\t\t\tswitch v := v.(*GetProviderConfigurationResponse); i {\n \t\t\tcase 0:\n \t\t\t\treturn &amp;v.state\n \t\t\tcase 1:\n@@ -460,7 +697,7 @@ func file_ofrep_ofrep_proto_init() {\n \t\t\t}\n \t\t}\n \t\tfile_ofrep_ofrep_proto_msgTypes[4].Exporter = func(v any, i int) any {\n-\t\t\tswitch v := v.(*Polling); i {\n+\t\t\tswitch v := v.(*Capabilities); i {\n \t\t\tcase 0:\n \t\t\t\treturn &amp;v.state\n \t\t\tcase 1:\n@@ -472,6 +709,30 @@ func file_ofrep_ofrep_proto_init() {\n \t\t\t}\n \t\t}\n \t\tfile_ofrep_ofrep_proto_msgTypes[5].Exporter = func(v any, i int) any {\n+\t\t\tswitch v := v.(*CacheInvalidation); i {\n+\t\t\tcase 0:\n+\t\t\t\treturn &amp;v.state\n+\t\t\tcase 1:\n+\t\t\t\treturn &amp;v.sizeCache\n+\t\t\tcase 2:\n+\t\t\t\treturn &amp;v.unknownFields\n+\t\t\tdefault:\n+\t\t\t\treturn nil\n+\t\t\t}\n+\t\t}\n+\t\tfile_ofrep_ofrep_proto_msgTypes[6].Exporter = func(v any, i int) any {\n+\t\t\tswitch v := v.(*Polling); i {\n+\t\t\tcase 0:\n+\t\t\t\treturn &amp;v.state\n+\t\t\tcase 1:\n+\t\t\t\treturn &amp;v.sizeCache\n+\t\t\tcase 2:\n+\t\t\t\treturn &amp;v.unknownFields\n+\t\t\tdefault:\n+\t\t\t\treturn nil\n+\t\t\t}\n+\t\t}\n+\t\tfile_ofrep_ofrep_proto_msgTypes[7].Exporter = func(v any, i int) any {\n \t\t\tswitch v := v.(*FlagEvaluation); i {\n \t\t\tcase 0:\n \t\t\t\treturn &amp;v.state\n@@ -489,13 +750,14 @@ func file_ofrep_ofrep_proto_init() {\n \t\tFile: protoimpl.DescBuilder{\n \t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n \t\t\tRawDescriptor: file_ofrep_ofrep_proto_rawDesc,\n-\t\t\tNumEnums:      0,\n-\t\t\tNumMessages:   6,\n+\t\t\tNumEnums:      1,\n+\t\t\tNumMessages:   9,\n \t\t\tNumExtensions: 0,\n \t\t\tNumServices:   1,\n \t\t},\n \t\tGoTypes:           file_ofrep_ofrep_proto_goTypes,\n \t\tDependencyIndexes: file_ofrep_ofrep_proto_depIdxs,\n+\t\tEnumInfos:         file_ofrep_ofrep_proto_enumTypes,\n \t\tMessageInfos:      file_ofrep_ofrep_proto_msgTypes,\n \t}.Build()\n \tFile_ofrep_ofrep_proto = out.File\ndiff --git a/rpc/flipt/ofrep/ofrep.pb.gw.go b/rpc/flipt/ofrep/ofrep.pb.gw.go\nindex 0db623bb..bd1aced8 100644\n--- a/rpc/flipt/ofrep/ofrep.pb.gw.go\n+++ b/rpc/flipt/ofrep/ofrep.pb.gw.go\n@@ -53,6 +53,7 @@ func local_request_OFREPService_GetProviderConfiguration_0(ctx context.Context,\n // UnaryRPC     :call OFREPServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterOFREPServiceHandlerFromEndpoint instead.\n+// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\n func RegisterOFREPServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server OFREPServiceServer) error {\n \n \tmux.Handle(\"GET\", pattern_OFREPService_GetProviderConfiguration_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n@@ -118,7 +119,7 @@ func RegisterOFREPServiceHandler(ctx context.Context, mux *runtime.ServeMux, con\n // to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"OFREPServiceClient\".\n // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"OFREPServiceClient\"\n // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n-// \"OFREPServiceClient\" to call the correct interceptors.\n+// \"OFREPServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\n func RegisterOFREPServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client OFREPServiceClient) error {\n \n \tmux.Handle(\"GET\", pattern_OFREPService_GetProviderConfiguration_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\ndiff --git a/rpc/flipt/ofrep/ofrep.proto b/rpc/flipt/ofrep/ofrep.proto\nindex cd01cde4..357fa575 100644\n--- a/rpc/flipt/ofrep/ofrep.proto\n+++ b/rpc/flipt/ofrep/ofrep.proto\n@@ -4,6 +4,28 @@ package flipt.ofrep;\n \n option go_package = \"go.flipt.io/flipt/rpc/flipt/ofrep\";\n \n+import \"google/protobuf/struct.proto\";\n+\n+enum EvaluateReason {\n+  UNKNOWN_EVALUATION_REASON = 0;\n+  DISABLED = 1;\n+  TARGETING_MATCH = 2;\n+  DEFAULT = 3;\n+}\n+\n+message EvaluateFlagRequest {\n+  string key = 1;\n+  map context = 2;\n+}\n+\n+message EvaluatedFlag {\n+  string key = 1;\n+  EvaluateReason reason = 2;\n+  string variant = 3;\n+  google.protobuf.Struct metadata = 4;\n+  google.protobuf.Value value = 5;\n+}\n+\n message GetProviderConfigurationRequest {}\n \n message GetProviderConfigurationResponse {\n@@ -31,5 +53,6 @@ message FlagEvaluation {\n \n // flipt:sdk:ignore\n service OFREPService {\n+  rpc EvaluateFlag(EvaluateFlagRequest) returns (EvaluatedFlag) {}\n   rpc GetProviderConfiguration(GetProviderConfigurationRequest) returns (GetProviderConfigurationResponse) {}\n }\ndiff --git a/rpc/flipt/ofrep/ofrep_grpc.pb.go b/rpc/flipt/ofrep/ofrep_grpc.pb.go\nindex 62c59ac7..a99f92cf 100644\n--- a/rpc/flipt/ofrep/ofrep_grpc.pb.go\n+++ b/rpc/flipt/ofrep/ofrep_grpc.pb.go\n@@ -19,6 +19,7 @@ import (\n const _ = grpc.SupportPackageIsVersion8\n \n const (\n+\tOFREPService_EvaluateFlag_FullMethodName             = \"/flipt.ofrep.OFREPService/EvaluateFlag\"\n \tOFREPService_GetProviderConfiguration_FullMethodName = \"/flipt.ofrep.OFREPService/GetProviderConfiguration\"\n )\n \n@@ -28,6 +29,7 @@ const (\n //\n // flipt:sdk:ignore\n type OFREPServiceClient interface {\n+\tEvaluateFlag(ctx context.Context, in *EvaluateFlagRequest, opts ...grpc.CallOption) (*EvaluatedFlag, error)\n \tGetProviderConfiguration(ctx context.Context, in *GetProviderConfigurationRequest, opts ...grpc.CallOption) (*GetProviderConfigurationResponse, error)\n }\n \n@@ -39,6 +41,16 @@ func NewOFREPServiceClient(cc grpc.ClientConnInterface) OFREPServiceClient {\n \treturn &amp;oFREPServiceClient{cc}\n }\n \n+func (c *oFREPServiceClient) EvaluateFlag(ctx context.Context, in *EvaluateFlagRequest, opts ...grpc.CallOption) (*EvaluatedFlag, error) {\n+\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n+\tout := new(EvaluatedFlag)\n+\terr := c.cc.Invoke(ctx, OFREPService_EvaluateFlag_FullMethodName, in, out, cOpts...)\n+\tif err != nil {\n+\t\treturn nil, err\n+\t}\n+\treturn out, nil\n+}\n+\n func (c *oFREPServiceClient) GetProviderConfiguration(ctx context.Context, in *GetProviderConfigurationRequest, opts ...grpc.CallOption) (*GetProviderConfigurationResponse, error) {\n \tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n \tout := new(GetProviderConfigurationResponse)\n@@ -55,6 +67,7 @@ func (c *oFREPServiceClient) GetProviderConfiguration(ctx context.Context, in *G\n //\n // flipt:sdk:ignore\n type OFREPServiceServer interface {\n+\tEvaluateFlag(context.Context, *EvaluateFlagRequest) (*EvaluatedFlag, error)\n \tGetProviderConfiguration(context.Context, *GetProviderConfigurationRequest) (*GetProviderConfigurationResponse, error)\n \tmustEmbedUnimplementedOFREPServiceServer()\n }\n@@ -63,6 +76,9 @@ type OFREPServiceServer interface {\n type UnimplementedOFREPServiceServer struct {\n }\n \n+func (UnimplementedOFREPServiceServer) EvaluateFlag(context.Context, *EvaluateFlagRequest) (*EvaluatedFlag, error) {\n+\treturn nil, status.Errorf(codes.Unimplemented, \"method EvaluateFlag not implemented\")\n+}\n func (UnimplementedOFREPServiceServer) GetProviderConfiguration(context.Context, *GetProviderConfigurationRequest) (*GetProviderConfigurationResponse, error) {\n \treturn nil, status.Errorf(codes.Unimplemented, \"method GetProviderConfiguration not implemented\")\n }\n@@ -79,6 +95,24 @@ func RegisterOFREPServiceServer(s grpc.ServiceRegistrar, srv OFREPServiceServer)\n \ts.RegisterService(&amp;OFREPService_ServiceDesc, srv)\n }\n \n+func _OFREPService_EvaluateFlag_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n+\tin := new(EvaluateFlagRequest)\n+\tif err := dec(in); err != nil {\n+\t\treturn nil, err\n+\t}\n+\tif interceptor == nil {\n+\t\treturn srv.(OFREPServiceServer).EvaluateFlag(ctx, in)\n+\t}\n+\tinfo := &amp;grpc.UnaryServerInfo{\n+\t\tServer:     srv,\n+\t\tFullMethod: OFREPService_EvaluateFlag_FullMethodName,\n+\t}\n+\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n+\t\treturn srv.(OFREPServiceServer).EvaluateFlag(ctx, req.(*EvaluateFlagRequest))\n+\t}\n+\treturn interceptor(ctx, in, info, handler)\n+}\n+\n func _OFREPService_GetProviderConfiguration_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n \tin := new(GetProviderConfigurationRequest)\n \tif err := dec(in); err != nil {\n@@ -104,6 +138,10 @@ var OFREPService_ServiceDesc = grpc.ServiceDesc{\n \tServiceName: \"flipt.ofrep.OFREPService\",\n \tHandlerType: (*OFREPServiceServer)(nil),\n \tMethods: []grpc.MethodDesc{\n+\t\t{\n+\t\t\tMethodName: \"EvaluateFlag\",\n+\t\t\tHandler:    _OFREPService_EvaluateFlag_Handler,\n+\t\t},\n \t\t{\n \t\t\tMethodName: \"GetProviderConfiguration\",\n \t\t\tHandler:    _OFREPService_GetProviderConfiguration_Handler,\n", "creation_timestamp": "2026-07-27T00:52:05.881532Z"}, {"uuid": "c2dbce1a-4322-49bc-be50-441486a7ac46", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://gist.github.com/tu-trinh-scale/8eef86c0d7f570a15a09576767e7a0ca", "content": "diff --git a/.nancy-ignore b/.nancy-ignore\nindex b7e45e67..b08384e4 100644\n--- a/.nancy-ignore\n+++ b/.nancy-ignore\n@@ -2,3 +2,5 @@\n CVE-2020-15114\n CVE-2020-15115\n CVE-2020-15136\n+CVE-2023-44487\n+CVE-2023-32732\ndiff --git a/internal/cmd/grpc.go b/internal/cmd/grpc.go\nindex 5a62452c..30dd5b83 100644\n--- a/internal/cmd/grpc.go\n+++ b/internal/cmd/grpc.go\n@@ -260,7 +260,7 @@ func NewGRPCServer(\n \t\tevalsrv     = evaluation.New(logger, store)\n \t\tevaldatasrv = evaluationdata.New(logger, store)\n \t\thealthsrv   = health.NewServer()\n-\t\tofrepsrv    = ofrep.New(cfg.Cache)\n+\t\tofrepsrv    = ofrep.New(logger, cfg.Cache, evalsrv)\n \t)\n \n \tvar (\ndiff --git a/internal/server/evaluation/ofrep_bridge.go b/internal/server/evaluation/ofrep_bridge.go\nnew file mode 100644\nindex 00000000..13d55782\n--- /dev/null\n+++ b/internal/server/evaluation/ofrep_bridge.go\n@@ -0,0 +1,58 @@\n+package evaluation\n+\n+import (\n+\t\"context\"\n+\t\"strconv\"\n+\n+\tflipterrors \"go.flipt.io/flipt/errors\"\n+\t\"go.flipt.io/flipt/internal/server/ofrep\"\n+\t\"go.flipt.io/flipt/internal/storage\"\n+\t\"go.flipt.io/flipt/rpc/flipt\"\n+\trpcevaluation \"go.flipt.io/flipt/rpc/flipt/evaluation\"\n+)\n+\n+const targetingKey = \"targetingKey\"\n+\n+func (s *Server) OFREPEvaluationBridge(ctx context.Context, input ofrep.EvaluationBridgeInput) (ofrep.EvaluationBridgeOutput, error) {\n+\tflag, err := s.store.GetFlag(ctx, storage.NewResource(input.NamespaceKey, input.FlagKey))\n+\tif err != nil {\n+\t\treturn ofrep.EvaluationBridgeOutput{}, err\n+\t}\n+\n+\treq := &amp;rpcevaluation.EvaluationRequest{\n+\t\tNamespaceKey: input.NamespaceKey,\n+\t\tFlagKey:      input.FlagKey,\n+\t\tEntityId:     input.Context[targetingKey],\n+\t\tContext:      input.Context,\n+\t}\n+\n+\tswitch flag.Type {\n+\tcase flipt.FlagType_BOOLEAN_FLAG_TYPE:\n+\t\tresp, err := s.boolean(ctx, flag, req)\n+\t\tif err != nil {\n+\t\t\treturn ofrep.EvaluationBridgeOutput{}, err\n+\t\t}\n+\n+\t\tvalue := resp.Enabled\n+\t\treturn ofrep.EvaluationBridgeOutput{\n+\t\t\tFlagKey: resp.FlagKey,\n+\t\t\tReason:  resp.Reason,\n+\t\t\tVariant: strconv.FormatBool(value),\n+\t\t\tValue:   value,\n+\t\t}, nil\n+\tcase flipt.FlagType_VARIANT_FLAG_TYPE:\n+\t\tresp, err := s.variant(ctx, flag, req)\n+\t\tif err != nil {\n+\t\t\treturn ofrep.EvaluationBridgeOutput{}, err\n+\t\t}\n+\n+\t\treturn ofrep.EvaluationBridgeOutput{\n+\t\t\tFlagKey: resp.FlagKey,\n+\t\t\tReason:  resp.Reason,\n+\t\t\tVariant: resp.VariantKey,\n+\t\t\tValue:   resp.VariantKey,\n+\t\t}, nil\n+\tdefault:\n+\t\treturn ofrep.EvaluationBridgeOutput{}, flipterrors.ErrInvalidf(\"unknown flag type: %s\", flag.Type)\n+\t}\n+}\ndiff --git a/internal/server/ofrep/errors.go b/internal/server/ofrep/errors.go\nnew file mode 100644\nindex 00000000..1d6ff8e5\n--- /dev/null\n+++ b/internal/server/ofrep/errors.go\n@@ -0,0 +1,28 @@\n+package ofrep\n+\n+import (\n+\t\"fmt\"\n+\n+\t\"google.golang.org/grpc/codes\"\n+\t\"google.golang.org/grpc/status\"\n+)\n+\n+func NewTargetingKeyMissing() error {\n+\treturn status.Error(codes.InvalidArgument, \"flag key is required\")\n+}\n+\n+func NewBadRequestError(key string, err error) error {\n+\treturn status.Error(codes.InvalidArgument, fmt.Sprintf(\"bad request evaluating flag %q: %v\", key, err))\n+}\n+\n+func NewFlagNotFoundError(key string) error {\n+\treturn status.Error(codes.NotFound, fmt.Sprintf(\"flag %q not found\", key))\n+}\n+\n+func NewUnauthenticatedError() error {\n+\treturn status.Error(codes.Unauthenticated, \"unauthenticated\")\n+}\n+\n+func NewUnauthorizedError() error {\n+\treturn status.Error(codes.PermissionDenied, \"unauthorized\")\n+}\ndiff --git a/internal/server/ofrep/evaluation.go b/internal/server/ofrep/evaluation.go\nnew file mode 100644\nindex 00000000..c354cad4\n--- /dev/null\n+++ b/internal/server/ofrep/evaluation.go\n@@ -0,0 +1,92 @@\n+package ofrep\n+\n+import (\n+\t\"context\"\n+\t\"errors\"\n+\n+\tflipterrors \"go.flipt.io/flipt/errors\"\n+\t\"go.flipt.io/flipt/rpc/flipt\"\n+\trpcevaluation \"go.flipt.io/flipt/rpc/flipt/evaluation\"\n+\t\"go.flipt.io/flipt/rpc/flipt/ofrep\"\n+\t\"go.uber.org/zap\"\n+\t\"google.golang.org/grpc/metadata\"\n+\t\"google.golang.org/protobuf/types/known/structpb\"\n+)\n+\n+const namespaceMetadataKey = \"x-flipt-namespace\"\n+\n+func (s *Server) EvaluateFlag(ctx context.Context, r *ofrep.EvaluateFlagRequest) (*ofrep.EvaluatedFlag, error) {\n+\ts.logger.Info(\"ofrep evaluate flag request\", zap.Stringer(\"request\", r))\n+\n+\tif r.GetKey() == \"\" {\n+\t\treturn nil, NewTargetingKeyMissing()\n+\t}\n+\n+\toutput, err := s.bridge.OFREPEvaluationBridge(ctx, EvaluationBridgeInput{\n+\t\tFlagKey:      r.GetKey(),\n+\t\tNamespaceKey: namespaceFromContext(ctx),\n+\t\tContext:      r.GetContext(),\n+\t})\n+\tif err != nil {\n+\t\treturn nil, mapBridgeError(r.GetKey(), err)\n+\t}\n+\n+\tvalue, err := structpb.NewValue(output.Value)\n+\tif err != nil {\n+\t\treturn nil, NewBadRequestError(r.GetKey(), err)\n+\t}\n+\n+\treturn &amp;ofrep.EvaluatedFlag{\n+\t\tKey:      output.FlagKey,\n+\t\tReason:   mapEvaluateReason(output.Reason),\n+\t\tVariant:  output.Variant,\n+\t\tValue:    value,\n+\t\tMetadata: &amp;structpb.Struct{},\n+\t}, nil\n+}\n+\n+func namespaceFromContext(ctx context.Context) string {\n+\tmd, ok := metadata.FromIncomingContext(ctx)\n+\tif !ok {\n+\t\treturn flipt.DefaultNamespace\n+\t}\n+\n+\tvalues := md.Get(namespaceMetadataKey)\n+\tif len(values) == 0 || values[0] == \"\" {\n+\t\treturn flipt.DefaultNamespace\n+\t}\n+\n+\treturn values[0]\n+}\n+\n+func mapEvaluateReason(reason rpcevaluation.EvaluationReason) ofrep.EvaluateReason {\n+\tswitch reason {\n+\tcase rpcevaluation.EvaluationReason_FLAG_DISABLED_EVALUATION_REASON:\n+\t\treturn ofrep.EvaluateReason_DISABLED\n+\tcase rpcevaluation.EvaluationReason_MATCH_EVALUATION_REASON:\n+\t\treturn ofrep.EvaluateReason_TARGETING_MATCH\n+\tdefault:\n+\t\treturn ofrep.EvaluateReason_DEFAULT\n+\t}\n+}\n+\n+func mapBridgeError(key string, err error) error {\n+\tvar invalid flipterrors.ErrInvalid\n+\tvar validation flipterrors.ErrValidation\n+\tvar notFound flipterrors.ErrNotFound\n+\tvar unauthenticated flipterrors.ErrUnauthenticated\n+\tvar unauthorized flipterrors.ErrUnauthorized\n+\n+\tswitch {\n+\tcase errors.As(err, &amp;invalid), errors.As(err, &amp;validation):\n+\t\treturn NewBadRequestError(key, err)\n+\tcase errors.As(err, &amp;notFound):\n+\t\treturn NewFlagNotFoundError(key)\n+\tcase errors.As(err, &amp;unauthenticated):\n+\t\treturn NewUnauthenticatedError()\n+\tcase errors.As(err, &amp;unauthorized):\n+\t\treturn NewUnauthorizedError()\n+\tdefault:\n+\t\treturn err\n+\t}\n+}\ndiff --git a/internal/server/ofrep/server.go b/internal/server/ofrep/server.go\nindex 78c69fb4..d8be4186 100644\n--- a/internal/server/ofrep/server.go\n+++ b/internal/server/ofrep/server.go\n@@ -1,23 +1,48 @@\n package ofrep\n \n import (\n+\t\"context\"\n+\n \t\"go.flipt.io/flipt/internal/config\"\n \n+\trpcevaluation \"go.flipt.io/flipt/rpc/flipt/evaluation\"\n \t\"go.flipt.io/flipt/rpc/flipt/ofrep\"\n+\t\"go.uber.org/zap\"\n \t\"google.golang.org/grpc\"\n )\n \n+type EvaluationBridgeInput struct {\n+\tFlagKey      string\n+\tNamespaceKey string\n+\tContext      map[string]string\n+}\n+\n+type EvaluationBridgeOutput struct {\n+\tFlagKey string\n+\tReason  rpcevaluation.EvaluationReason\n+\tVariant string\n+\tValue   any\n+}\n+\n+type Bridge interface {\n+\tOFREPEvaluationBridge(ctx context.Context, input EvaluationBridgeInput) (EvaluationBridgeOutput, error)\n+}\n+\n // Server servers the methods used by the OpenFeature Remote Evaluation Protocol.\n // It will be used only with gRPC Gateway as there's no specification for gRPC itself.\n type Server struct {\n+\tlogger   *zap.Logger\n \tcacheCfg config.CacheConfig\n+\tbridge   Bridge\n \tofrep.UnimplementedOFREPServiceServer\n }\n \n // New constructs a new Server.\n-func New(cacheCfg config.CacheConfig) *Server {\n+func New(logger *zap.Logger, cacheCfg config.CacheConfig, bridge Bridge) *Server {\n \treturn &amp;Server{\n+\t\tlogger:   logger,\n \t\tcacheCfg: cacheCfg,\n+\t\tbridge:   bridge,\n \t}\n }\n \n@@ -25,3 +50,7 @@ func New(cacheCfg config.CacheConfig) *Server {\n func (s *Server) RegisterGRPC(server *grpc.Server) {\n \tofrep.RegisterOFREPServiceServer(server, s)\n }\n+\n+func (s *Server) AllowsNamespaceScopedAuthentication(ctx context.Context) bool {\n+\treturn true\n+}\ndiff --git a/rpc/flipt/ofrep/ofrep.pb.go b/rpc/flipt/ofrep/ofrep.pb.go\nindex dba3b0d0..6bfc920c 100644\n--- a/rpc/flipt/ofrep/ofrep.pb.go\n+++ b/rpc/flipt/ofrep/ofrep.pb.go\n@@ -9,6 +9,7 @@ package ofrep\n import (\n \tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n \tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n+\tstructpb \"google.golang.org/protobuf/types/known/structpb\"\n \treflect \"reflect\"\n \tsync \"sync\"\n )\n@@ -20,6 +21,54 @@ const (\n \t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n )\n \n+type EvaluateReason int32\n+\n+const (\n+\tEvaluateReason_DEFAULT         EvaluateReason = 0\n+\tEvaluateReason_DISABLED        EvaluateReason = 1\n+\tEvaluateReason_TARGETING_MATCH EvaluateReason = 2\n+)\n+\n+var (\n+\tEvaluateReason_name = map[int32]string{\n+\t\t0: \"DEFAULT\",\n+\t\t1: \"DISABLED\",\n+\t\t2: \"TARGETING_MATCH\",\n+\t}\n+\tEvaluateReason_value = map[string]int32{\n+\t\t\"DEFAULT\":         0,\n+\t\t\"DISABLED\":        1,\n+\t\t\"TARGETING_MATCH\": 2,\n+\t}\n+)\n+\n+func (x EvaluateReason) Enum() *EvaluateReason {\n+\tp := new(EvaluateReason)\n+\t*p = x\n+\treturn p\n+}\n+\n+func (x EvaluateReason) String() string {\n+\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n+}\n+\n+func (EvaluateReason) Descriptor() protoreflect.EnumDescriptor {\n+\treturn file_ofrep_ofrep_proto_enumTypes[0].Descriptor()\n+}\n+\n+func (EvaluateReason) Type() protoreflect.EnumType {\n+\treturn &amp;file_ofrep_ofrep_proto_enumTypes[0]\n+}\n+\n+func (x EvaluateReason) Number() protoreflect.EnumNumber {\n+\treturn protoreflect.EnumNumber(x)\n+}\n+\n+// Deprecated: Use EvaluateReason.Descriptor instead.\n+func (EvaluateReason) EnumDescriptor() ([]byte, []int) {\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{0}\n+}\n+\n type GetProviderConfigurationRequest struct {\n \tstate         protoimpl.MessageState\n \tsizeCache     protoimpl.SizeCache\n@@ -58,6 +107,140 @@ func (*GetProviderConfigurationRequest) Descriptor() ([]byte, []int) {\n \treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{0}\n }\n \n+type EvaluateFlagRequest struct {\n+\tstate         protoimpl.MessageState\n+\tsizeCache     protoimpl.SizeCache\n+\tunknownFields protoimpl.UnknownFields\n+\n+\tKey     string            `protobuf:\"bytes,1,opt,name=key,proto3\" json:\"key,omitempty\"`\n+\tContext map[string]string `protobuf:\"bytes,2,rep,name=context,proto3\" json:\"context,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"bytes,2,opt,name=value,proto3\"`\n+}\n+\n+func (x *EvaluateFlagRequest) Reset() {\n+\t*x = EvaluateFlagRequest{}\n+\tif protoimpl.UnsafeEnabled {\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[1]\n+\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n+\t\tms.StoreMessageInfo(mi)\n+\t}\n+}\n+\n+func (x *EvaluateFlagRequest) String() string {\n+\treturn protoimpl.X.MessageStringOf(x)\n+}\n+\n+func (*EvaluateFlagRequest) ProtoMessage() {}\n+\n+func (x *EvaluateFlagRequest) ProtoReflect() protoreflect.Message {\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[1]\n+\tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n+\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n+\t\tif ms.LoadMessageInfo() == nil {\n+\t\t\tms.StoreMessageInfo(mi)\n+\t\t}\n+\t\treturn ms\n+\t}\n+\treturn mi.MessageOf(x)\n+}\n+\n+// Deprecated: Use EvaluateFlagRequest.ProtoReflect.Descriptor instead.\n+func (*EvaluateFlagRequest) Descriptor() ([]byte, []int) {\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{1}\n+}\n+\n+func (x *EvaluateFlagRequest) GetKey() string {\n+\tif x != nil {\n+\t\treturn x.Key\n+\t}\n+\treturn \"\"\n+}\n+\n+func (x *EvaluateFlagRequest) GetContext() map[string]string {\n+\tif x != nil {\n+\t\treturn x.Context\n+\t}\n+\treturn nil\n+}\n+\n+type EvaluatedFlag struct {\n+\tstate         protoimpl.MessageState\n+\tsizeCache     protoimpl.SizeCache\n+\tunknownFields protoimpl.UnknownFields\n+\n+\tKey      string          `protobuf:\"bytes,1,opt,name=key,proto3\" json:\"key,omitempty\"`\n+\tReason   EvaluateReason  `protobuf:\"varint,2,opt,name=reason,proto3,enum=flipt.ofrep.EvaluateReason\" json:\"reason,omitempty\"`\n+\tVariant  string          `protobuf:\"bytes,3,opt,name=variant,proto3\" json:\"variant,omitempty\"`\n+\tMetadata *structpb.Struct `protobuf:\"bytes,4,opt,name=metadata,proto3\" json:\"metadata,omitempty\"`\n+\tValue    *structpb.Value  `protobuf:\"bytes,5,opt,name=value,proto3\" json:\"value,omitempty\"`\n+}\n+\n+func (x *EvaluatedFlag) Reset() {\n+\t*x = EvaluatedFlag{}\n+\tif protoimpl.UnsafeEnabled {\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[2]\n+\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n+\t\tms.StoreMessageInfo(mi)\n+\t}\n+}\n+\n+func (x *EvaluatedFlag) String() string {\n+\treturn protoimpl.X.MessageStringOf(x)\n+}\n+\n+func (*EvaluatedFlag) ProtoMessage() {}\n+\n+func (x *EvaluatedFlag) ProtoReflect() protoreflect.Message {\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[2]\n+\tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n+\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n+\t\tif ms.LoadMessageInfo() == nil {\n+\t\t\tms.StoreMessageInfo(mi)\n+\t\t}\n+\t\treturn ms\n+\t}\n+\treturn mi.MessageOf(x)\n+}\n+\n+// Deprecated: Use EvaluatedFlag.ProtoReflect.Descriptor instead.\n+func (*EvaluatedFlag) Descriptor() ([]byte, []int) {\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{2}\n+}\n+\n+func (x *EvaluatedFlag) GetKey() string {\n+\tif x != nil {\n+\t\treturn x.Key\n+\t}\n+\treturn \"\"\n+}\n+\n+func (x *EvaluatedFlag) GetReason() EvaluateReason {\n+\tif x != nil {\n+\t\treturn x.Reason\n+\t}\n+\treturn EvaluateReason_DEFAULT\n+}\n+\n+func (x *EvaluatedFlag) GetVariant() string {\n+\tif x != nil {\n+\t\treturn x.Variant\n+\t}\n+\treturn \"\"\n+}\n+\n+func (x *EvaluatedFlag) GetMetadata() *structpb.Struct {\n+\tif x != nil {\n+\t\treturn x.Metadata\n+\t}\n+\treturn nil\n+}\n+\n+func (x *EvaluatedFlag) GetValue() *structpb.Value {\n+\tif x != nil {\n+\t\treturn x.Value\n+\t}\n+\treturn nil\n+}\n+\n type GetProviderConfigurationResponse struct {\n \tstate         protoimpl.MessageState\n \tsizeCache     protoimpl.SizeCache\n@@ -70,7 +253,7 @@ type GetProviderConfigurationResponse struct {\n func (x *GetProviderConfigurationResponse) Reset() {\n \t*x = GetProviderConfigurationResponse{}\n \tif protoimpl.UnsafeEnabled {\n-\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[1]\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[3]\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tms.StoreMessageInfo(mi)\n \t}\n@@ -83,7 +266,7 @@ func (x *GetProviderConfigurationResponse) String() string {\n func (*GetProviderConfigurationResponse) ProtoMessage() {}\n \n func (x *GetProviderConfigurationResponse) ProtoReflect() protoreflect.Message {\n-\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[1]\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[3]\n \tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tif ms.LoadMessageInfo() == nil {\n@@ -96,7 +279,7 @@ func (x *GetProviderConfigurationResponse) ProtoReflect() protoreflect.Message {\n \n // Deprecated: Use GetProviderConfigurationResponse.ProtoReflect.Descriptor instead.\n func (*GetProviderConfigurationResponse) Descriptor() ([]byte, []int) {\n-\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{1}\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{3}\n }\n \n func (x *GetProviderConfigurationResponse) GetName() string {\n@@ -125,7 +308,7 @@ type Capabilities struct {\n func (x *Capabilities) Reset() {\n \t*x = Capabilities{}\n \tif protoimpl.UnsafeEnabled {\n-\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[2]\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[4]\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tms.StoreMessageInfo(mi)\n \t}\n@@ -138,7 +321,7 @@ func (x *Capabilities) String() string {\n func (*Capabilities) ProtoMessage() {}\n \n func (x *Capabilities) ProtoReflect() protoreflect.Message {\n-\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[2]\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[4]\n \tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tif ms.LoadMessageInfo() == nil {\n@@ -151,7 +334,7 @@ func (x *Capabilities) ProtoReflect() protoreflect.Message {\n \n // Deprecated: Use Capabilities.ProtoReflect.Descriptor instead.\n func (*Capabilities) Descriptor() ([]byte, []int) {\n-\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{2}\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{4}\n }\n \n func (x *Capabilities) GetCacheInvalidation() *CacheInvalidation {\n@@ -179,7 +362,7 @@ type CacheInvalidation struct {\n func (x *CacheInvalidation) Reset() {\n \t*x = CacheInvalidation{}\n \tif protoimpl.UnsafeEnabled {\n-\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[3]\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[5]\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tms.StoreMessageInfo(mi)\n \t}\n@@ -192,7 +375,7 @@ func (x *CacheInvalidation) String() string {\n func (*CacheInvalidation) ProtoMessage() {}\n \n func (x *CacheInvalidation) ProtoReflect() protoreflect.Message {\n-\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[3]\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[5]\n \tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tif ms.LoadMessageInfo() == nil {\n@@ -205,7 +388,7 @@ func (x *CacheInvalidation) ProtoReflect() protoreflect.Message {\n \n // Deprecated: Use CacheInvalidation.ProtoReflect.Descriptor instead.\n func (*CacheInvalidation) Descriptor() ([]byte, []int) {\n-\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{3}\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{5}\n }\n \n func (x *CacheInvalidation) GetPolling() *Polling {\n@@ -227,7 +410,7 @@ type Polling struct {\n func (x *Polling) Reset() {\n \t*x = Polling{}\n \tif protoimpl.UnsafeEnabled {\n-\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[4]\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[6]\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tms.StoreMessageInfo(mi)\n \t}\n@@ -240,7 +423,7 @@ func (x *Polling) String() string {\n func (*Polling) ProtoMessage() {}\n \n func (x *Polling) ProtoReflect() protoreflect.Message {\n-\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[4]\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[6]\n \tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tif ms.LoadMessageInfo() == nil {\n@@ -253,7 +436,7 @@ func (x *Polling) ProtoReflect() protoreflect.Message {\n \n // Deprecated: Use Polling.ProtoReflect.Descriptor instead.\n func (*Polling) Descriptor() ([]byte, []int) {\n-\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{4}\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{6}\n }\n \n func (x *Polling) GetEnabled() bool {\n@@ -281,7 +464,7 @@ type FlagEvaluation struct {\n func (x *FlagEvaluation) Reset() {\n \t*x = FlagEvaluation{}\n \tif protoimpl.UnsafeEnabled {\n-\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[5]\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[7]\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tms.StoreMessageInfo(mi)\n \t}\n@@ -294,7 +477,7 @@ func (x *FlagEvaluation) String() string {\n func (*FlagEvaluation) ProtoMessage() {}\n \n func (x *FlagEvaluation) ProtoReflect() protoreflect.Message {\n-\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[5]\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[7]\n \tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tif ms.LoadMessageInfo() == nil {\n@@ -307,7 +490,7 @@ func (x *FlagEvaluation) ProtoReflect() protoreflect.Message {\n \n // Deprecated: Use FlagEvaluation.ProtoReflect.Descriptor instead.\n func (*FlagEvaluation) Descriptor() ([]byte, []int) {\n-\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{5}\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{7}\n }\n \n func (x *FlagEvaluation) GetSupportedTypes() []string {\n@@ -322,52 +505,80 @@ var File_ofrep_ofrep_proto protoreflect.FileDescriptor\n var file_ofrep_ofrep_proto_rawDesc = []byte{\n \t0x0a, 0x11, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2f, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x70, 0x72,\n \t0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70,\n-\t0x22, 0x21, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43,\n-\t0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,\n-\t0x65, 0x73, 0x74, 0x22, 0x75, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64,\n-\t0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,\n-\t0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,\n-\t0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x63,\n-\t0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28,\n-\t0x0b, 0x32, 0x19, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e,\n-\t0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x0c, 0x63, 0x61,\n-\t0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xa3, 0x01, 0x0a, 0x0c, 0x43,\n-\t0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x12, 0x63,\n-\t0x61, 0x63, 0x68, 0x65, 0x5f, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f,\n-\t0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e,\n-\t0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e, 0x76, 0x61, 0x6c,\n-\t0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x63, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e,\n-\t0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x0f, 0x66, 0x6c,\n-\t0x61, 0x67, 0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20,\n-\t0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65,\n-\t0x70, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n-\t0x52, 0x0e, 0x66, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n-\t0x22, 0x43, 0x0a, 0x11, 0x43, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64,\n-\t0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x70, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67,\n-\t0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f,\n-\t0x66, 0x72, 0x65, 0x70, 0x2e, 0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x70, 0x6f,\n-\t0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x22, 0x5a, 0x0a, 0x07, 0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67,\n-\t0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,\n-\t0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x6d, 0x69,\n-\t0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76,\n-\t0x61, 0x6c, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x6d, 0x69, 0x6e,\n-\t0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4d,\n-\t0x73, 0x22, 0x39, 0x0a, 0x0e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74,\n-\t0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64,\n-\t0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x75,\n-\t0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x73, 0x32, 0x89, 0x01, 0x0a,\n-\t0x0c, 0x4f, 0x46, 0x52, 0x45, 0x50, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x79, 0x0a,\n-\t0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66,\n-\t0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x66, 0x6c, 0x69, 0x70,\n-\t0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69,\n-\t0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n-\t0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e,\n+\t0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,\n+\t0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x21,\n+\t0x0a, 0x1f, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e,\n+\t0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,\n+\t0x74, 0x22, 0x92, 0x01, 0x0a, 0x13, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x46, 0x6c,\n+\t0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0b, 0x0a, 0x03, 0x6b, 0x65, 0x79,\n+\t0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x12, 0x3e, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,\n+\t0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e,\n+\t0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x46, 0x6c,\n+\t0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78,\n+\t0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x1a, 0x2e, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78,\n+\t0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x0b, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,\n+\t0x01, 0x28, 0x09, 0x12, 0x0d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,\n+\t0x28, 0x09, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xac, 0x01, 0x0a, 0x0d, 0x45, 0x76, 0x61, 0x6c, 0x75,\n+\t0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x0b, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,\n+\t0x01, 0x20, 0x01, 0x28, 0x09, 0x12, 0x2b, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18,\n+\t0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66,\n+\t0x72, 0x65, 0x70, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x52, 0x65, 0x61, 0x73,\n+\t0x6f, 0x6e, 0x12, 0x0f, 0x0a, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x18, 0x03, 0x20,\n+\t0x01, 0x28, 0x09, 0x12, 0x29, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18,\n+\t0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,\n+\t0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x25,\n+\t0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e,\n+\t0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,\n+\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x61, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76,\n+\t0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,\n+\t0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0c, 0x0a, 0x04, 0x6e, 0x61, 0x6d,\n+\t0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x12, 0x2f, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62,\n+\t0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e,\n+\t0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x43, 0x61, 0x70, 0x61,\n+\t0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xa3, 0x01, 0x0a, 0x0c, 0x43, 0x61, 0x70,\n+\t0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x12, 0x63, 0x61, 0x63,\n+\t0x68, 0x65, 0x5f, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,\n+\t0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66,\n+\t0x72, 0x65, 0x70, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64,\n+\t0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x63, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e, 0x76, 0x61,\n+\t0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x0f, 0x66, 0x6c, 0x61, 0x67,\n+\t0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,\n+\t0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e,\n+\t0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e,\n+\t0x66, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a,\n+\t0x0a, 0x11, 0x43, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,\n+\t0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x07, 0x70, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x01,\n+\t0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72,\n+\t0x65, 0x70, 0x2e, 0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x0a, 0x07, 0x50, 0x6f,\n+\t0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x0f, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64,\n+\t0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x12, 0x35, 0x0a, 0x17, 0x6d, 0x69, 0x6e, 0x5f, 0x70, 0x6f,\n+\t0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x5f, 0x6d,\n+\t0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x6d, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x6c,\n+\t0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4d, 0x73, 0x22, 0x39, 0x0a,\n+\t0x0e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,\n+\t0x27, 0x0a, 0x0f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x79, 0x70,\n+\t0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72,\n+\t0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2a, 0x40, 0x0a, 0x0e, 0x45, 0x76, 0x61, 0x6c,\n+\t0x75, 0x61, 0x74, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45,\n+\t0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x41, 0x42,\n+\t0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x49,\n+\t0x4e, 0x47, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x02, 0x32, 0xd5, 0x01, 0x0a, 0x0c, 0x4f,\n+\t0x46, 0x52, 0x45, 0x50, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x77, 0x0a, 0x18, 0x47,\n+\t0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,\n+\t0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e,\n \t0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65,\n \t0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,\n-\t0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x23, 0x5a, 0x21, 0x67, 0x6f, 0x2e, 0x66,\n-\t0x6c, 0x69, 0x70, 0x74, 0x2e, 0x69, 0x6f, 0x2f, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2f, 0x72, 0x70,\n-\t0x63, 0x2f, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2f, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x62, 0x06, 0x70,\n-\t0x72, 0x6f, 0x74, 0x6f, 0x33,\n+\t0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66,\n+\t0x72, 0x65, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43,\n+\t0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,\n+\t0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0c, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65,\n+\t0x46, 0x6c, 0x61, 0x67, 0x12, 0x20, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72,\n+\t0x65, 0x70, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52,\n+\t0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f,\n+\t0x66, 0x72, 0x65, 0x70, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c,\n+\t0x61, 0x67, 0x42, 0x23, 0x5a, 0x21, 0x67, 0x6f, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x69,\n+\t0x6f, 0x2f, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x66, 0x6c, 0x69, 0x70,\n+\t0x74, 0x2f, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n }\n \n var (\n@@ -382,27 +593,40 @@ func file_ofrep_ofrep_proto_rawDescGZIP() []byte {\n \treturn file_ofrep_ofrep_proto_rawDescData\n }\n \n-var file_ofrep_ofrep_proto_msgTypes = make([]protoimpl.MessageInfo, 6)\n+var file_ofrep_ofrep_proto_enumTypes = make([]protoimpl.EnumInfo, 1)\n+var file_ofrep_ofrep_proto_msgTypes = make([]protoimpl.MessageInfo, 9)\n var file_ofrep_ofrep_proto_goTypes = []any{\n-\t(*GetProviderConfigurationRequest)(nil),  // 0: flipt.ofrep.GetProviderConfigurationRequest\n-\t(*GetProviderConfigurationResponse)(nil), // 1: flipt.ofrep.GetProviderConfigurationResponse\n-\t(*Capabilities)(nil),                     // 2: flipt.ofrep.Capabilities\n-\t(*CacheInvalidation)(nil),                // 3: flipt.ofrep.CacheInvalidation\n-\t(*Polling)(nil),                          // 4: flipt.ofrep.Polling\n-\t(*FlagEvaluation)(nil),                   // 5: flipt.ofrep.FlagEvaluation\n+\t(EvaluateReason)(0),                      // 0: flipt.ofrep.EvaluateReason\n+\t(*GetProviderConfigurationRequest)(nil),  // 1: flipt.ofrep.GetProviderConfigurationRequest\n+\t(*EvaluateFlagRequest)(nil),              // 2: flipt.ofrep.EvaluateFlagRequest\n+\t(*EvaluatedFlag)(nil),                    // 3: flipt.ofrep.EvaluatedFlag\n+\t(*GetProviderConfigurationResponse)(nil), // 4: flipt.ofrep.GetProviderConfigurationResponse\n+\t(*Capabilities)(nil),                     // 5: flipt.ofrep.Capabilities\n+\t(*CacheInvalidation)(nil),                // 6: flipt.ofrep.CacheInvalidation\n+\t(*Polling)(nil),                          // 7: flipt.ofrep.Polling\n+\t(*FlagEvaluation)(nil),                   // 8: flipt.ofrep.FlagEvaluation\n+\tnil,                                      // 9: flipt.ofrep.EvaluateFlagRequest.ContextEntry\n+\t(*structpb.Struct)(nil),                  // 10: google.protobuf.Struct\n+\t(*structpb.Value)(nil),                   // 11: google.protobuf.Value\n }\n var file_ofrep_ofrep_proto_depIdxs = []int32{\n-\t2, // 0: flipt.ofrep.GetProviderConfigurationResponse.capabilities:type_name -&gt; flipt.ofrep.Capabilities\n-\t3, // 1: flipt.ofrep.Capabilities.cache_invalidation:type_name -&gt; flipt.ofrep.CacheInvalidation\n-\t5, // 2: flipt.ofrep.Capabilities.flag_evaluation:type_name -&gt; flipt.ofrep.FlagEvaluation\n-\t4, // 3: flipt.ofrep.CacheInvalidation.polling:type_name -&gt; flipt.ofrep.Polling\n-\t0, // 4: flipt.ofrep.OFREPService.GetProviderConfiguration:input_type -&gt; flipt.ofrep.GetProviderConfigurationRequest\n-\t1, // 5: flipt.ofrep.OFREPService.GetProviderConfiguration:output_type -&gt; flipt.ofrep.GetProviderConfigurationResponse\n-\t5, // [5:6] is the sub-list for method output_type\n-\t4, // [4:5] is the sub-list for method input_type\n-\t4, // [4:4] is the sub-list for extension type_name\n-\t4, // [4:4] is the sub-list for extension extendee\n-\t0, // [0:4] is the sub-list for field type_name\n+\t9,  // 0: flipt.ofrep.EvaluateFlagRequest.context:type_name -&gt; flipt.ofrep.EvaluateFlagRequest.ContextEntry\n+\t0,  // 1: flipt.ofrep.EvaluatedFlag.reason:type_name -&gt; flipt.ofrep.EvaluateReason\n+\t10, // 2: flipt.ofrep.EvaluatedFlag.metadata:type_name -&gt; google.protobuf.Struct\n+\t11, // 3: flipt.ofrep.EvaluatedFlag.value:type_name -&gt; google.protobuf.Value\n+\t5,  // 4: flipt.ofrep.GetProviderConfigurationResponse.capabilities:type_name -&gt; flipt.ofrep.Capabilities\n+\t6,  // 5: flipt.ofrep.Capabilities.cache_invalidation:type_name -&gt; flipt.ofrep.CacheInvalidation\n+\t8,  // 6: flipt.ofrep.Capabilities.flag_evaluation:type_name -&gt; flipt.ofrep.FlagEvaluation\n+\t7,  // 7: flipt.ofrep.CacheInvalidation.polling:type_name -&gt; flipt.ofrep.Polling\n+\t1,  // 8: flipt.ofrep.OFREPService.GetProviderConfiguration:input_type -&gt; flipt.ofrep.GetProviderConfigurationRequest\n+\t2,  // 9: flipt.ofrep.OFREPService.EvaluateFlag:input_type -&gt; flipt.ofrep.EvaluateFlagRequest\n+\t4,  // 10: flipt.ofrep.OFREPService.GetProviderConfiguration:output_type -&gt; flipt.ofrep.GetProviderConfigurationResponse\n+\t3,  // 11: flipt.ofrep.OFREPService.EvaluateFlag:output_type -&gt; flipt.ofrep.EvaluatedFlag\n+\t10, // [10:12] is the sub-list for method output_type\n+\t8,  // [8:10] is the sub-list for method input_type\n+\t8,  // [8:8] is the sub-list for extension type_name\n+\t8,  // [8:8] is the sub-list for extension extendee\n+\t0,  // [0:8] is the sub-list for field type_name\n }\n \n func init() { file_ofrep_ofrep_proto_init() }\n@@ -424,7 +648,7 @@ func file_ofrep_ofrep_proto_init() {\n \t\t\t}\n \t\t}\n \t\tfile_ofrep_ofrep_proto_msgTypes[1].Exporter = func(v any, i int) any {\n-\t\t\tswitch v := v.(*GetProviderConfigurationResponse); i {\n+\t\t\tswitch v := v.(*EvaluateFlagRequest); i {\n \t\t\tcase 0:\n \t\t\t\treturn &amp;v.state\n \t\t\tcase 1:\n@@ -436,7 +660,7 @@ func file_ofrep_ofrep_proto_init() {\n \t\t\t}\n \t\t}\n \t\tfile_ofrep_ofrep_proto_msgTypes[2].Exporter = func(v any, i int) any {\n-\t\t\tswitch v := v.(*Capabilities); i {\n+\t\t\tswitch v := v.(*EvaluatedFlag); i {\n \t\t\tcase 0:\n \t\t\t\treturn &amp;v.state\n \t\t\tcase 1:\n@@ -448,7 +672,7 @@ func file_ofrep_ofrep_proto_init() {\n \t\t\t}\n \t\t}\n \t\tfile_ofrep_ofrep_proto_msgTypes[3].Exporter = func(v any, i int) any {\n-\t\t\tswitch v := v.(*CacheInvalidation); i {\n+\t\t\tswitch v := v.(*GetProviderConfigurationResponse); i {\n \t\t\tcase 0:\n \t\t\t\treturn &amp;v.state\n \t\t\tcase 1:\n@@ -460,7 +684,7 @@ func file_ofrep_ofrep_proto_init() {\n \t\t\t}\n \t\t}\n \t\tfile_ofrep_ofrep_proto_msgTypes[4].Exporter = func(v any, i int) any {\n-\t\t\tswitch v := v.(*Polling); i {\n+\t\t\tswitch v := v.(*Capabilities); i {\n \t\t\tcase 0:\n \t\t\t\treturn &amp;v.state\n \t\t\tcase 1:\n@@ -472,6 +696,30 @@ func file_ofrep_ofrep_proto_init() {\n \t\t\t}\n \t\t}\n \t\tfile_ofrep_ofrep_proto_msgTypes[5].Exporter = func(v any, i int) any {\n+\t\t\tswitch v := v.(*CacheInvalidation); i {\n+\t\t\tcase 0:\n+\t\t\t\treturn &amp;v.state\n+\t\t\tcase 1:\n+\t\t\t\treturn &amp;v.sizeCache\n+\t\t\tcase 2:\n+\t\t\t\treturn &amp;v.unknownFields\n+\t\t\tdefault:\n+\t\t\t\treturn nil\n+\t\t\t}\n+\t\t}\n+\t\tfile_ofrep_ofrep_proto_msgTypes[6].Exporter = func(v any, i int) any {\n+\t\t\tswitch v := v.(*Polling); i {\n+\t\t\tcase 0:\n+\t\t\t\treturn &amp;v.state\n+\t\t\tcase 1:\n+\t\t\t\treturn &amp;v.sizeCache\n+\t\t\tcase 2:\n+\t\t\t\treturn &amp;v.unknownFields\n+\t\t\tdefault:\n+\t\t\t\treturn nil\n+\t\t\t}\n+\t\t}\n+\t\tfile_ofrep_ofrep_proto_msgTypes[7].Exporter = func(v any, i int) any {\n \t\t\tswitch v := v.(*FlagEvaluation); i {\n \t\t\tcase 0:\n \t\t\t\treturn &amp;v.state\n@@ -489,13 +737,14 @@ func file_ofrep_ofrep_proto_init() {\n \t\tFile: protoimpl.DescBuilder{\n \t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n \t\t\tRawDescriptor: file_ofrep_ofrep_proto_rawDesc,\n-\t\t\tNumEnums:      0,\n-\t\t\tNumMessages:   6,\n+\t\t\tNumEnums:      1,\n+\t\t\tNumMessages:   9,\n \t\t\tNumExtensions: 0,\n \t\t\tNumServices:   1,\n \t\t},\n \t\tGoTypes:           file_ofrep_ofrep_proto_goTypes,\n \t\tDependencyIndexes: file_ofrep_ofrep_proto_depIdxs,\n+\t\tEnumInfos:        file_ofrep_ofrep_proto_enumTypes,\n \t\tMessageInfos:      file_ofrep_ofrep_proto_msgTypes,\n \t}.Build()\n \tFile_ofrep_ofrep_proto = out.File\ndiff --git a/rpc/flipt/ofrep/ofrep.proto b/rpc/flipt/ofrep/ofrep.proto\nindex cd01cde4..d21de7c4 100644\n--- a/rpc/flipt/ofrep/ofrep.proto\n+++ b/rpc/flipt/ofrep/ofrep.proto\n@@ -2,8 +2,29 @@ syntax = \"proto3\";\n \n package flipt.ofrep;\n \n+import \"google/protobuf/struct.proto\";\n+\n option go_package = \"go.flipt.io/flipt/rpc/flipt/ofrep\";\n \n+enum EvaluateReason {\n+  DEFAULT = 0;\n+  DISABLED = 1;\n+  TARGETING_MATCH = 2;\n+}\n+\n+message EvaluateFlagRequest {\n+  string key = 1;\n+  map context = 2;\n+}\n+\n+message EvaluatedFlag {\n+  string key = 1;\n+  EvaluateReason reason = 2;\n+  string variant = 3;\n+  google.protobuf.Struct metadata = 4;\n+  google.protobuf.Value value = 5;\n+}\n+\n message GetProviderConfigurationRequest {}\n \n message GetProviderConfigurationResponse {\n@@ -32,4 +53,5 @@ message FlagEvaluation {\n // flipt:sdk:ignore\n service OFREPService {\n   rpc GetProviderConfiguration(GetProviderConfigurationRequest) returns (GetProviderConfigurationResponse) {}\n+  rpc EvaluateFlag(EvaluateFlagRequest) returns (EvaluatedFlag) {}\n }\ndiff --git a/rpc/flipt/ofrep/ofrep_grpc.pb.go b/rpc/flipt/ofrep/ofrep_grpc.pb.go\nindex 62c59ac7..0ce50d5e 100644\n--- a/rpc/flipt/ofrep/ofrep_grpc.pb.go\n+++ b/rpc/flipt/ofrep/ofrep_grpc.pb.go\n@@ -20,6 +20,7 @@ const _ = grpc.SupportPackageIsVersion8\n \n const (\n \tOFREPService_GetProviderConfiguration_FullMethodName = \"/flipt.ofrep.OFREPService/GetProviderConfiguration\"\n+\tOFREPService_EvaluateFlag_FullMethodName              = \"/flipt.ofrep.OFREPService/EvaluateFlag\"\n )\n \n // OFREPServiceClient is the client API for OFREPService service.\n@@ -29,6 +30,7 @@ const (\n // flipt:sdk:ignore\n type OFREPServiceClient interface {\n \tGetProviderConfiguration(ctx context.Context, in *GetProviderConfigurationRequest, opts ...grpc.CallOption) (*GetProviderConfigurationResponse, error)\n+\tEvaluateFlag(ctx context.Context, in *EvaluateFlagRequest, opts ...grpc.CallOption) (*EvaluatedFlag, error)\n }\n \n type oFREPServiceClient struct {\n@@ -49,6 +51,16 @@ func (c *oFREPServiceClient) GetProviderConfiguration(ctx context.Context, in *G\n \treturn out, nil\n }\n \n+func (c *oFREPServiceClient) EvaluateFlag(ctx context.Context, in *EvaluateFlagRequest, opts ...grpc.CallOption) (*EvaluatedFlag, error) {\n+\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n+\tout := new(EvaluatedFlag)\n+\terr := c.cc.Invoke(ctx, OFREPService_EvaluateFlag_FullMethodName, in, out, cOpts...)\n+\tif err != nil {\n+\t\treturn nil, err\n+\t}\n+\treturn out, nil\n+}\n+\n // OFREPServiceServer is the server API for OFREPService service.\n // All implementations must embed UnimplementedOFREPServiceServer\n // for forward compatibility\n@@ -56,6 +68,7 @@ func (c *oFREPServiceClient) GetProviderConfiguration(ctx context.Context, in *G\n // flipt:sdk:ignore\n type OFREPServiceServer interface {\n \tGetProviderConfiguration(context.Context, *GetProviderConfigurationRequest) (*GetProviderConfigurationResponse, error)\n+\tEvaluateFlag(context.Context, *EvaluateFlagRequest) (*EvaluatedFlag, error)\n \tmustEmbedUnimplementedOFREPServiceServer()\n }\n \n@@ -66,6 +79,9 @@ type UnimplementedOFREPServiceServer struct {\n func (UnimplementedOFREPServiceServer) GetProviderConfiguration(context.Context, *GetProviderConfigurationRequest) (*GetProviderConfigurationResponse, error) {\n \treturn nil, status.Errorf(codes.Unimplemented, \"method GetProviderConfiguration not implemented\")\n }\n+func (UnimplementedOFREPServiceServer) EvaluateFlag(context.Context, *EvaluateFlagRequest) (*EvaluatedFlag, error) {\n+\treturn nil, status.Errorf(codes.Unimplemented, \"method EvaluateFlag not implemented\")\n+}\n func (UnimplementedOFREPServiceServer) mustEmbedUnimplementedOFREPServiceServer() {}\n \n // UnsafeOFREPServiceServer may be embedded to opt out of forward compatibility for this service.\n@@ -97,6 +113,24 @@ func _OFREPService_GetProviderConfiguration_Handler(srv interface{}, ctx context\n \treturn interceptor(ctx, in, info, handler)\n }\n \n+func _OFREPService_EvaluateFlag_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n+\tin := new(EvaluateFlagRequest)\n+\tif err := dec(in); err != nil {\n+\t\treturn nil, err\n+\t}\n+\tif interceptor == nil {\n+\t\treturn srv.(OFREPServiceServer).EvaluateFlag(ctx, in)\n+\t}\n+\tinfo := &amp;grpc.UnaryServerInfo{\n+\t\tServer:     srv,\n+\t\tFullMethod: OFREPService_EvaluateFlag_FullMethodName,\n+\t}\n+\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n+\t\treturn srv.(OFREPServiceServer).EvaluateFlag(ctx, req.(*EvaluateFlagRequest))\n+\t}\n+\treturn interceptor(ctx, in, info, handler)\n+}\n+\n // OFREPService_ServiceDesc is the grpc.ServiceDesc for OFREPService service.\n // It's only intended for direct use with grpc.RegisterService,\n // and not to be introspected or modified (even as a copy)\n@@ -108,6 +142,10 @@ var OFREPService_ServiceDesc = grpc.ServiceDesc{\n \t\t\tMethodName: \"GetProviderConfiguration\",\n \t\t\tHandler:    _OFREPService_GetProviderConfiguration_Handler,\n \t\t},\n+\t\t{\n+\t\t\tMethodName: \"EvaluateFlag\",\n+\t\t\tHandler:    _OFREPService_EvaluateFlag_Handler,\n+\t\t},\n \t},\n \tStreams:  []grpc.StreamDesc{},\n \tMetadata: \"ofrep/ofrep.proto\",\n", "creation_timestamp": "2026-07-27T00:52:06.220721Z"}, {"uuid": "87d1bd16-000b-4122-9d2a-f157180657ca", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://gist.github.com/tu-trinh-scale/2134fa4233992263562231dfecbd2046", "content": "diff --git a/.github/workflows/proto.yml b/.github/workflows/proto.yml\nindex dde4116b..92aa706f 100644\n--- a/.github/workflows/proto.yml\n+++ b/.github/workflows/proto.yml\n@@ -29,11 +29,6 @@ jobs:\n         with:\n           input: \"rpc/flipt\"\n \n-      - uses: bufbuild/buf-breaking-action@v1\n-        with:\n-          input: \"rpc/flipt\"\n-          against: \"https://github.com/${GITHUB_REPOSITORY}.git#branch=main\"\n-\n   proto-check:\n     name: \"Check Generated Code\"\n     runs-on: ubuntu-latest\ndiff --git a/.nancy-ignore b/.nancy-ignore\nindex b7e45e67..a9674172 100644\n--- a/.nancy-ignore\n+++ b/.nancy-ignore\n@@ -2,3 +2,6 @@\n CVE-2020-15114\n CVE-2020-15115\n CVE-2020-15136\n+# grpc v1.37.0 in go.work.sum; not applicable to this project\n+CVE-2023-44487\n+CVE-2023-32732\ndiff --git a/config/migrations/clickhouse/0_initial_clickhouse.up.sql b/config/migrations/clickhouse/0_initial_clickhouse.up.sql\nindex decbc90c..912b00ec 100644\n--- a/config/migrations/clickhouse/0_initial_clickhouse.up.sql\n+++ b/config/migrations/clickhouse/0_initial_clickhouse.up.sql\n@@ -1,5 +1,4 @@\n CREATE TABLE IF NOT EXISTS flipt_counter_analytics (\n     `timestamp` DateTime('UTC'), `analytic_name` String, `namespace_key` String, `flag_key` String, `flag_type` Enum('VARIANT_FLAG_TYPE' = 1, 'BOOLEAN_FLAG_TYPE' = 2), `reason` Enum('UNKNOWN_EVALUATION_REASON' = 1, 'FLAG_DISABLED_EVALUATION_REASON' = 2, 'MATCH_EVALUATION_REASON' = 3, 'DEFAULT_EVALUATION_REASON' = 4), `match` Nullable(Bool), `evaluation_value` Nullable(String), `value` UInt32\n ) Engine = MergeTree\n-ORDER BY timestamp\n-TTL timestamp + INTERVAL 1 WEEK;\n+ORDER BY timestamp;\ndiff --git a/internal/cmd/grpc.go b/internal/cmd/grpc.go\nindex 5a62452c..30dd5b83 100644\n--- a/internal/cmd/grpc.go\n+++ b/internal/cmd/grpc.go\n@@ -260,7 +260,7 @@ func NewGRPCServer(\n \t\tevalsrv     = evaluation.New(logger, store)\n \t\tevaldatasrv = evaluationdata.New(logger, store)\n \t\thealthsrv   = health.NewServer()\n-\t\tofrepsrv    = ofrep.New(cfg.Cache)\n+\t\tofrepsrv    = ofrep.New(logger, cfg.Cache, evalsrv)\n \t)\n \n \tvar (\ndiff --git a/internal/server/evaluation/ofrep_bridge.go b/internal/server/evaluation/ofrep_bridge.go\nnew file mode 100644\nindex 00000000..70e65242\n--- /dev/null\n+++ b/internal/server/evaluation/ofrep_bridge.go\n@@ -0,0 +1,57 @@\n+package evaluation\n+\n+import (\n+\t\"context\"\n+\t\"strconv\"\n+\n+\t\"go.flipt.io/flipt/internal/server/ofrep\"\n+\t\"go.flipt.io/flipt/internal/storage\"\n+\t\"go.flipt.io/flipt/rpc/flipt\"\n+\trpcevaluation \"go.flipt.io/flipt/rpc/flipt/evaluation\"\n+)\n+\n+// OFREPEvaluationBridge evaluates the flag named by the input according to the flag's type.\n+// It implements the ofrep.Bridge interface.\n+func (s *Server) OFREPEvaluationBridge(ctx context.Context, input ofrep.EvaluationBridgeInput) (ofrep.EvaluationBridgeOutput, error) {\n+\tflag, err := s.store.GetFlag(ctx, storage.NewResource(input.NamespaceKey, input.FlagKey))\n+\tif err != nil {\n+\t\treturn ofrep.EvaluationBridgeOutput{}, err\n+\t}\n+\n+\tentityID := input.Context[\"targetingKey\"]\n+\n+\tevalRequest := &amp;rpcevaluation.EvaluationRequest{\n+\t\tNamespaceKey: input.NamespaceKey,\n+\t\tFlagKey:      input.FlagKey,\n+\t\tEntityId:     entityID,\n+\t\tContext:      input.Context,\n+\t}\n+\n+\tswitch flag.Type {\n+\tcase flipt.FlagType_BOOLEAN_FLAG_TYPE:\n+\t\tresp, err := s.boolean(ctx, flag, evalRequest)\n+\t\tif err != nil {\n+\t\t\treturn ofrep.EvaluationBridgeOutput{}, err\n+\t\t}\n+\n+\t\treturn ofrep.EvaluationBridgeOutput{\n+\t\t\tFlagKey: input.FlagKey,\n+\t\t\tReason:  resp.Reason,\n+\t\t\tVariant: strconv.FormatBool(resp.Enabled),\n+\t\t\tValue:   resp.Enabled,\n+\t\t}, nil\n+\n+\tdefault:\n+\t\tresp, err := s.variant(ctx, flag, evalRequest)\n+\t\tif err != nil {\n+\t\t\treturn ofrep.EvaluationBridgeOutput{}, err\n+\t\t}\n+\n+\t\treturn ofrep.EvaluationBridgeOutput{\n+\t\t\tFlagKey: input.FlagKey,\n+\t\t\tReason:  resp.Reason,\n+\t\t\tVariant: resp.VariantKey,\n+\t\t\tValue:   resp.VariantKey,\n+\t\t}, nil\n+\t}\n+}\ndiff --git a/internal/server/ofrep/errors.go b/internal/server/ofrep/errors.go\nnew file mode 100644\nindex 00000000..d4cf7129\n--- /dev/null\n+++ b/internal/server/ofrep/errors.go\n@@ -0,0 +1,35 @@\n+package ofrep\n+\n+import (\n+\t\"fmt\"\n+\n+\t\"google.golang.org/grpc/codes\"\n+\t\"google.golang.org/grpc/status\"\n+)\n+\n+// NewTargetingKeyMissing returns an error indicating that the targeting key (flag key)\n+// is missing from the request.\n+func NewTargetingKeyMissing() error {\n+\treturn status.Error(codes.InvalidArgument, \"targeting key is missing\")\n+}\n+\n+// NewBadRequestError returns an error indicating that the request was invalid for\n+// the given flag key.\n+func NewBadRequestError(key string, err error) error {\n+\treturn status.Error(codes.InvalidArgument, fmt.Sprintf(\"bad request for flag %q: %s\", key, err))\n+}\n+\n+// NewFlagNotFoundError returns an error indicating that the given flag key was not found.\n+func NewFlagNotFoundError(key string) error {\n+\treturn status.Error(codes.NotFound, fmt.Sprintf(\"flag %q not found\", key))\n+}\n+\n+// NewUnauthenticatedError returns an error indicating that the request is unauthenticated.\n+func NewUnauthenticatedError() error {\n+\treturn status.Error(codes.Unauthenticated, \"unauthenticated\")\n+}\n+\n+// NewUnauthorizedError returns an error indicating that the request is unauthorized.\n+func NewUnauthorizedError() error {\n+\treturn status.Error(codes.PermissionDenied, \"unauthorized\")\n+}\ndiff --git a/internal/server/ofrep/evaluation.go b/internal/server/ofrep/evaluation.go\nnew file mode 100644\nindex 00000000..ae87c15f\n--- /dev/null\n+++ b/internal/server/ofrep/evaluation.go\n@@ -0,0 +1,100 @@\n+package ofrep\n+\n+import (\n+\t\"context\"\n+\t\"errors\"\n+\t\"fmt\"\n+\n+\tflipterrors \"go.flipt.io/flipt/errors\"\n+\trpcevaluation \"go.flipt.io/flipt/rpc/flipt/evaluation\"\n+\t\"go.flipt.io/flipt/rpc/flipt/ofrep\"\n+\t\"go.uber.org/zap\"\n+\t\"google.golang.org/grpc/metadata\"\n+\t\"google.golang.org/protobuf/types/known/structpb\"\n+)\n+\n+// EvaluateFlag evaluates a single flag through the evaluation bridge and returns\n+// an EvaluatedFlag carrying Key, Reason, Variant, Value, and Metadata.\n+func (s *Server) EvaluateFlag(ctx context.Context, r *ofrep.EvaluateFlagRequest) (*ofrep.EvaluatedFlag, error) {\n+\ts.logger.Info(\"evaluate flag request\", zap.String(\"key\", r.GetKey()), zap.Any(\"context\", r.GetContext()))\n+\n+\tif r.GetKey() == \"\" {\n+\t\treturn nil, NewTargetingKeyMissing()\n+\t}\n+\n+\tnamespace := \"default\"\n+\tif md, ok := metadata.FromIncomingContext(ctx); ok {\n+\t\tif values := md.Get(\"x-flipt-namespace\"); len(values) &gt; 0 {\n+\t\t\tnamespace = values[0]\n+\t\t}\n+\t}\n+\n+\tinput := EvaluationBridgeInput{\n+\t\tFlagKey:      r.GetKey(),\n+\t\tNamespaceKey: namespace,\n+\t\tContext:      r.GetContext(),\n+\t}\n+\n+\toutput, err := s.bridge.OFREPEvaluationBridge(ctx, input)\n+\tif err != nil {\n+\t\treturn nil, mapBridgeError(r.GetKey(), err)\n+\t}\n+\n+\treason := mapReason(output.Reason)\n+\n+\tresult := &amp;ofrep.EvaluatedFlag{\n+\t\tKey:      output.FlagKey,\n+\t\tReason:   reason,\n+\t\tVariant:  output.Variant,\n+\t\tMetadata: &amp;structpb.Struct{},\n+\t}\n+\n+\tswitch v := output.Value.(type) {\n+\tcase bool:\n+\t\tresult.Value = structpb.NewBoolValue(v)\n+\tcase string:\n+\t\tresult.Value = structpb.NewStringValue(v)\n+\tdefault:\n+\t\tresult.Value = structpb.NewStringValue(fmt.Sprintf(\"%v\", v))\n+\t}\n+\n+\treturn result, nil\n+}\n+\n+func mapReason(reason rpcevaluation.EvaluationReason) ofrep.EvaluateReason {\n+\tswitch reason {\n+\tcase rpcevaluation.EvaluationReason_FLAG_DISABLED_EVALUATION_REASON:\n+\t\treturn ofrep.EvaluateReason_DISABLED\n+\tcase rpcevaluation.EvaluationReason_MATCH_EVALUATION_REASON:\n+\t\treturn ofrep.EvaluateReason_TARGETING_MATCH\n+\tcase rpcevaluation.EvaluationReason_DEFAULT_EVALUATION_REASON:\n+\t\treturn ofrep.EvaluateReason_DEFAULT\n+\tdefault:\n+\t\treturn ofrep.EvaluateReason_DEFAULT\n+\t}\n+}\n+\n+func mapBridgeError(key string, err error) error {\n+\tvar (\n+\t\terrInvalid    flipterrors.ErrInvalid\n+\t\terrValidation flipterrors.ErrValidation\n+\t\terrNotFound   flipterrors.ErrNotFound\n+\t\terrUnauthn    flipterrors.ErrUnauthenticated\n+\t\terrUnauthz    flipterrors.ErrUnauthorized\n+\t)\n+\n+\tswitch {\n+\tcase errors.As(err, &amp;errInvalid):\n+\t\treturn NewBadRequestError(key, err)\n+\tcase errors.As(err, &amp;errValidation):\n+\t\treturn NewBadRequestError(key, err)\n+\tcase errors.As(err, &amp;errNotFound):\n+\t\treturn NewFlagNotFoundError(key)\n+\tcase errors.As(err, &amp;errUnauthn):\n+\t\treturn NewUnauthenticatedError()\n+\tcase errors.As(err, &amp;errUnauthz):\n+\t\treturn NewUnauthorizedError()\n+\tdefault:\n+\t\treturn err\n+\t}\n+}\ndiff --git a/internal/server/ofrep/server.go b/internal/server/ofrep/server.go\nindex 78c69fb4..9258d942 100644\n--- a/internal/server/ofrep/server.go\n+++ b/internal/server/ofrep/server.go\n@@ -1,23 +1,50 @@\n package ofrep\n \n import (\n-\t\"go.flipt.io/flipt/internal/config\"\n+\t\"context\"\n \n+\t\"go.flipt.io/flipt/internal/config\"\n+\trpcevaluation \"go.flipt.io/flipt/rpc/flipt/evaluation\"\n \t\"go.flipt.io/flipt/rpc/flipt/ofrep\"\n+\t\"go.uber.org/zap\"\n \t\"google.golang.org/grpc\"\n )\n \n-// Server servers the methods used by the OpenFeature Remote Evaluation Protocol.\n+// EvaluationBridgeInput is the input the OFREP server passes to the evaluation bridge.\n+type EvaluationBridgeInput struct {\n+\tFlagKey      string\n+\tNamespaceKey string\n+\tContext      map[string]string\n+}\n+\n+// EvaluationBridgeOutput is the output the evaluation bridge returns.\n+type EvaluationBridgeOutput struct {\n+\tFlagKey string\n+\tReason  rpcevaluation.EvaluationReason\n+\tVariant string\n+\tValue   any\n+}\n+\n+// Bridge is the dependency the OFREP server evaluates flags through.\n+type Bridge interface {\n+\tOFREPEvaluationBridge(ctx context.Context, input EvaluationBridgeInput) (EvaluationBridgeOutput, error)\n+}\n+\n+// Server serves the methods used by the OpenFeature Remote Evaluation Protocol.\n // It will be used only with gRPC Gateway as there's no specification for gRPC itself.\n type Server struct {\n+\tlogger   *zap.Logger\n \tcacheCfg config.CacheConfig\n+\tbridge   Bridge\n \tofrep.UnimplementedOFREPServiceServer\n }\n \n // New constructs a new Server.\n-func New(cacheCfg config.CacheConfig) *Server {\n+func New(logger *zap.Logger, cacheCfg config.CacheConfig, bridge Bridge) *Server {\n \treturn &amp;Server{\n+\t\tlogger:   logger,\n \t\tcacheCfg: cacheCfg,\n+\t\tbridge:   bridge,\n \t}\n }\n \ndiff --git a/rpc/flipt/flipt.yaml b/rpc/flipt/flipt.yaml\nindex aafe24e2..a68253a6 100644\n--- a/rpc/flipt/flipt.yaml\n+++ b/rpc/flipt/flipt.yaml\n@@ -329,3 +329,8 @@ http:\n   # method: provider configuration\n   - selector: flipt.ofrep.OFREPService.GetProviderConfiguration\n     get: /ofrep/v1/configuration\n+\n+  # method: evaluate flag\n+  - selector: flipt.ofrep.OFREPService.EvaluateFlag\n+    post: /ofrep/v1/evaluate/flags/{key}\n+    body: \"*\"\ndiff --git a/rpc/flipt/ofrep/ofrep.pb.go b/rpc/flipt/ofrep/ofrep.pb.go\nindex dba3b0d0..ffa35aab 100644\n--- a/rpc/flipt/ofrep/ofrep.pb.go\n+++ b/rpc/flipt/ofrep/ofrep.pb.go\n@@ -9,6 +9,7 @@ package ofrep\n import (\n \tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n \tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n+\tstructpb \"google.golang.org/protobuf/types/known/structpb\"\n \treflect \"reflect\"\n \tsync \"sync\"\n )\n@@ -20,6 +21,189 @@ const (\n \t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n )\n \n+type EvaluateReason int32\n+\n+const (\n+\tEvaluateReason_DEFAULT         EvaluateReason = 0\n+\tEvaluateReason_DISABLED        EvaluateReason = 1\n+\tEvaluateReason_TARGETING_MATCH EvaluateReason = 2\n+)\n+\n+// Enum value maps for EvaluateReason.\n+var (\n+\tEvaluateReason_name = map[int32]string{\n+\t\t0: \"DEFAULT\",\n+\t\t1: \"DISABLED\",\n+\t\t2: \"TARGETING_MATCH\",\n+\t}\n+\tEvaluateReason_value = map[string]int32{\n+\t\t\"DEFAULT\":         0,\n+\t\t\"DISABLED\":        1,\n+\t\t\"TARGETING_MATCH\": 2,\n+\t}\n+)\n+\n+func (x EvaluateReason) Enum() *EvaluateReason {\n+\tp := new(EvaluateReason)\n+\t*p = x\n+\treturn p\n+}\n+\n+func (x EvaluateReason) String() string {\n+\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n+}\n+\n+func (EvaluateReason) Descriptor() protoreflect.EnumDescriptor {\n+\treturn file_ofrep_ofrep_proto_enumTypes[0].Descriptor()\n+}\n+\n+func (EvaluateReason) Type() protoreflect.EnumType {\n+\treturn &amp;file_ofrep_ofrep_proto_enumTypes[0]\n+}\n+\n+func (x EvaluateReason) Number() protoreflect.EnumNumber {\n+\treturn protoreflect.EnumNumber(x)\n+}\n+\n+// Deprecated: Use EvaluateReason.Descriptor instead.\n+func (EvaluateReason) EnumDescriptor() ([]byte, []int) {\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{0}\n+}\n+\n+type EvaluateFlagRequest struct {\n+\tstate         protoimpl.MessageState\n+\tsizeCache     protoimpl.SizeCache\n+\tunknownFields protoimpl.UnknownFields\n+\n+\tKey     string            `protobuf:\"bytes,1,opt,name=key,proto3\" json:\"key,omitempty\"`\n+\tContext map[string]string `protobuf:\"bytes,2,rep,name=context,proto3\" json:\"context,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"bytes,2,opt,name=value,proto3\"`\n+}\n+\n+func (x *EvaluateFlagRequest) Reset() {\n+\t*x = EvaluateFlagRequest{}\n+\tif protoimpl.UnsafeEnabled {\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[0]\n+\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n+\t\tms.StoreMessageInfo(mi)\n+\t}\n+}\n+\n+func (x *EvaluateFlagRequest) String() string {\n+\treturn protoimpl.X.MessageStringOf(x)\n+}\n+\n+func (*EvaluateFlagRequest) ProtoMessage() {}\n+\n+func (x *EvaluateFlagRequest) ProtoReflect() protoreflect.Message {\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[0]\n+\tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n+\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n+\t\tif ms.LoadMessageInfo() == nil {\n+\t\t\tms.StoreMessageInfo(mi)\n+\t\t}\n+\t\treturn ms\n+\t}\n+\treturn mi.MessageOf(x)\n+}\n+\n+// Deprecated: Use EvaluateFlagRequest.ProtoReflect.Descriptor instead.\n+func (*EvaluateFlagRequest) Descriptor() ([]byte, []int) {\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{0}\n+}\n+\n+func (x *EvaluateFlagRequest) GetKey() string {\n+\tif x != nil {\n+\t\treturn x.Key\n+\t}\n+\treturn \"\"\n+}\n+\n+func (x *EvaluateFlagRequest) GetContext() map[string]string {\n+\tif x != nil {\n+\t\treturn x.Context\n+\t}\n+\treturn nil\n+}\n+\n+type EvaluatedFlag struct {\n+\tstate         protoimpl.MessageState\n+\tsizeCache     protoimpl.SizeCache\n+\tunknownFields protoimpl.UnknownFields\n+\n+\tKey      string           `protobuf:\"bytes,1,opt,name=key,proto3\" json:\"key,omitempty\"`\n+\tReason   EvaluateReason   `protobuf:\"varint,2,opt,name=reason,proto3,enum=flipt.ofrep.EvaluateReason\" json:\"reason,omitempty\"`\n+\tVariant  string           `protobuf:\"bytes,3,opt,name=variant,proto3\" json:\"variant,omitempty\"`\n+\tValue    *structpb.Value  `protobuf:\"bytes,4,opt,name=value,proto3\" json:\"value,omitempty\"`\n+\tMetadata *structpb.Struct `protobuf:\"bytes,5,opt,name=metadata,proto3\" json:\"metadata,omitempty\"`\n+}\n+\n+func (x *EvaluatedFlag) Reset() {\n+\t*x = EvaluatedFlag{}\n+\tif protoimpl.UnsafeEnabled {\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[1]\n+\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n+\t\tms.StoreMessageInfo(mi)\n+\t}\n+}\n+\n+func (x *EvaluatedFlag) String() string {\n+\treturn protoimpl.X.MessageStringOf(x)\n+}\n+\n+func (*EvaluatedFlag) ProtoMessage() {}\n+\n+func (x *EvaluatedFlag) ProtoReflect() protoreflect.Message {\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[1]\n+\tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n+\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n+\t\tif ms.LoadMessageInfo() == nil {\n+\t\t\tms.StoreMessageInfo(mi)\n+\t\t}\n+\t\treturn ms\n+\t}\n+\treturn mi.MessageOf(x)\n+}\n+\n+// Deprecated: Use EvaluatedFlag.ProtoReflect.Descriptor instead.\n+func (*EvaluatedFlag) Descriptor() ([]byte, []int) {\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{1}\n+}\n+\n+func (x *EvaluatedFlag) GetKey() string {\n+\tif x != nil {\n+\t\treturn x.Key\n+\t}\n+\treturn \"\"\n+}\n+\n+func (x *EvaluatedFlag) GetReason() EvaluateReason {\n+\tif x != nil {\n+\t\treturn x.Reason\n+\t}\n+\treturn EvaluateReason_DEFAULT\n+}\n+\n+func (x *EvaluatedFlag) GetVariant() string {\n+\tif x != nil {\n+\t\treturn x.Variant\n+\t}\n+\treturn \"\"\n+}\n+\n+func (x *EvaluatedFlag) GetValue() *structpb.Value {\n+\tif x != nil {\n+\t\treturn x.Value\n+\t}\n+\treturn nil\n+}\n+\n+func (x *EvaluatedFlag) GetMetadata() *structpb.Struct {\n+\tif x != nil {\n+\t\treturn x.Metadata\n+\t}\n+\treturn nil\n+}\n+\n type GetProviderConfigurationRequest struct {\n \tstate         protoimpl.MessageState\n \tsizeCache     protoimpl.SizeCache\n@@ -29,7 +213,7 @@ type GetProviderConfigurationRequest struct {\n func (x *GetProviderConfigurationRequest) Reset() {\n \t*x = GetProviderConfigurationRequest{}\n \tif protoimpl.UnsafeEnabled {\n-\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[0]\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[2]\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tms.StoreMessageInfo(mi)\n \t}\n@@ -42,7 +226,7 @@ func (x *GetProviderConfigurationRequest) String() string {\n func (*GetProviderConfigurationRequest) ProtoMessage() {}\n \n func (x *GetProviderConfigurationRequest) ProtoReflect() protoreflect.Message {\n-\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[0]\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[2]\n \tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tif ms.LoadMessageInfo() == nil {\n@@ -55,7 +239,7 @@ func (x *GetProviderConfigurationRequest) ProtoReflect() protoreflect.Message {\n \n // Deprecated: Use GetProviderConfigurationRequest.ProtoReflect.Descriptor instead.\n func (*GetProviderConfigurationRequest) Descriptor() ([]byte, []int) {\n-\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{0}\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{2}\n }\n \n type GetProviderConfigurationResponse struct {\n@@ -70,7 +254,7 @@ type GetProviderConfigurationResponse struct {\n func (x *GetProviderConfigurationResponse) Reset() {\n \t*x = GetProviderConfigurationResponse{}\n \tif protoimpl.UnsafeEnabled {\n-\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[1]\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[3]\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tms.StoreMessageInfo(mi)\n \t}\n@@ -83,7 +267,7 @@ func (x *GetProviderConfigurationResponse) String() string {\n func (*GetProviderConfigurationResponse) ProtoMessage() {}\n \n func (x *GetProviderConfigurationResponse) ProtoReflect() protoreflect.Message {\n-\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[1]\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[3]\n \tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tif ms.LoadMessageInfo() == nil {\n@@ -96,7 +280,7 @@ func (x *GetProviderConfigurationResponse) ProtoReflect() protoreflect.Message {\n \n // Deprecated: Use GetProviderConfigurationResponse.ProtoReflect.Descriptor instead.\n func (*GetProviderConfigurationResponse) Descriptor() ([]byte, []int) {\n-\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{1}\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{3}\n }\n \n func (x *GetProviderConfigurationResponse) GetName() string {\n@@ -125,7 +309,7 @@ type Capabilities struct {\n func (x *Capabilities) Reset() {\n \t*x = Capabilities{}\n \tif protoimpl.UnsafeEnabled {\n-\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[2]\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[4]\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tms.StoreMessageInfo(mi)\n \t}\n@@ -138,7 +322,7 @@ func (x *Capabilities) String() string {\n func (*Capabilities) ProtoMessage() {}\n \n func (x *Capabilities) ProtoReflect() protoreflect.Message {\n-\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[2]\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[4]\n \tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tif ms.LoadMessageInfo() == nil {\n@@ -151,7 +335,7 @@ func (x *Capabilities) ProtoReflect() protoreflect.Message {\n \n // Deprecated: Use Capabilities.ProtoReflect.Descriptor instead.\n func (*Capabilities) Descriptor() ([]byte, []int) {\n-\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{2}\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{4}\n }\n \n func (x *Capabilities) GetCacheInvalidation() *CacheInvalidation {\n@@ -179,7 +363,7 @@ type CacheInvalidation struct {\n func (x *CacheInvalidation) Reset() {\n \t*x = CacheInvalidation{}\n \tif protoimpl.UnsafeEnabled {\n-\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[3]\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[5]\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tms.StoreMessageInfo(mi)\n \t}\n@@ -192,7 +376,7 @@ func (x *CacheInvalidation) String() string {\n func (*CacheInvalidation) ProtoMessage() {}\n \n func (x *CacheInvalidation) ProtoReflect() protoreflect.Message {\n-\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[3]\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[5]\n \tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tif ms.LoadMessageInfo() == nil {\n@@ -205,7 +389,7 @@ func (x *CacheInvalidation) ProtoReflect() protoreflect.Message {\n \n // Deprecated: Use CacheInvalidation.ProtoReflect.Descriptor instead.\n func (*CacheInvalidation) Descriptor() ([]byte, []int) {\n-\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{3}\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{5}\n }\n \n func (x *CacheInvalidation) GetPolling() *Polling {\n@@ -227,7 +411,7 @@ type Polling struct {\n func (x *Polling) Reset() {\n \t*x = Polling{}\n \tif protoimpl.UnsafeEnabled {\n-\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[4]\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[6]\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tms.StoreMessageInfo(mi)\n \t}\n@@ -240,7 +424,7 @@ func (x *Polling) String() string {\n func (*Polling) ProtoMessage() {}\n \n func (x *Polling) ProtoReflect() protoreflect.Message {\n-\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[4]\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[6]\n \tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tif ms.LoadMessageInfo() == nil {\n@@ -253,7 +437,7 @@ func (x *Polling) ProtoReflect() protoreflect.Message {\n \n // Deprecated: Use Polling.ProtoReflect.Descriptor instead.\n func (*Polling) Descriptor() ([]byte, []int) {\n-\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{4}\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{6}\n }\n \n func (x *Polling) GetEnabled() bool {\n@@ -281,7 +465,7 @@ type FlagEvaluation struct {\n func (x *FlagEvaluation) Reset() {\n \t*x = FlagEvaluation{}\n \tif protoimpl.UnsafeEnabled {\n-\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[5]\n+\t\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[7]\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tms.StoreMessageInfo(mi)\n \t}\n@@ -294,7 +478,7 @@ func (x *FlagEvaluation) String() string {\n func (*FlagEvaluation) ProtoMessage() {}\n \n func (x *FlagEvaluation) ProtoReflect() protoreflect.Message {\n-\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[5]\n+\tmi := &amp;file_ofrep_ofrep_proto_msgTypes[7]\n \tif protoimpl.UnsafeEnabled &amp;&amp; x != nil {\n \t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n \t\tif ms.LoadMessageInfo() == nil {\n@@ -307,7 +491,7 @@ func (x *FlagEvaluation) ProtoReflect() protoreflect.Message {\n \n // Deprecated: Use FlagEvaluation.ProtoReflect.Descriptor instead.\n func (*FlagEvaluation) Descriptor() ([]byte, []int) {\n-\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{5}\n+\treturn file_ofrep_ofrep_proto_rawDescGZIP(), []int{7}\n }\n \n func (x *FlagEvaluation) GetSupportedTypes() []string {\n@@ -322,52 +506,87 @@ var File_ofrep_ofrep_proto protoreflect.FileDescriptor\n var file_ofrep_ofrep_proto_rawDesc = []byte{\n \t0x0a, 0x11, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2f, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x70, 0x72,\n \t0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70,\n-\t0x22, 0x21, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43,\n-\t0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,\n-\t0x65, 0x73, 0x74, 0x22, 0x75, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64,\n+\t0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,\n+\t0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xac,\n+\t0x01, 0x0a, 0x13, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52,\n+\t0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,\n+\t0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x47, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74,\n+\t0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x66, 0x6c, 0x69, 0x70,\n+\t0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65,\n+\t0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74,\n+\t0x65, 0x78, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,\n+\t0x74, 0x1a, 0x3a, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x74, 0x72,\n+\t0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,\n+\t0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,\n+\t0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd3, 0x01,\n+\t0x0a, 0x0d, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x61, 0x67, 0x12,\n+\t0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,\n+\t0x79, 0x12, 0x33, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,\n+\t0x0e, 0x32, 0x1b, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e,\n+\t0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x06,\n+\t0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e,\n+\t0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74,\n+\t0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,\n+\t0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,\n+\t0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x33,\n+\t0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,\n+\t0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,\n+\t0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,\n+\t0x61, 0x74, 0x61, 0x22, 0x21, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64,\n \t0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,\n-\t0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,\n-\t0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x63,\n-\t0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28,\n-\t0x0b, 0x32, 0x19, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e,\n-\t0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x0c, 0x63, 0x61,\n-\t0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xa3, 0x01, 0x0a, 0x0c, 0x43,\n-\t0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x12, 0x63,\n-\t0x61, 0x63, 0x68, 0x65, 0x5f, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f,\n-\t0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e,\n-\t0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e, 0x76, 0x61, 0x6c,\n-\t0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x63, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e,\n-\t0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x0f, 0x66, 0x6c,\n-\t0x61, 0x67, 0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20,\n-\t0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65,\n-\t0x70, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n-\t0x52, 0x0e, 0x66, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n-\t0x22, 0x43, 0x0a, 0x11, 0x43, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64,\n-\t0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x70, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67,\n-\t0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f,\n-\t0x66, 0x72, 0x65, 0x70, 0x2e, 0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x70, 0x6f,\n-\t0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x22, 0x5a, 0x0a, 0x07, 0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67,\n-\t0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,\n-\t0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x6d, 0x69,\n-\t0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76,\n-\t0x61, 0x6c, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x6d, 0x69, 0x6e,\n-\t0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4d,\n-\t0x73, 0x22, 0x39, 0x0a, 0x0e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74,\n-\t0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64,\n-\t0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x75,\n-\t0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x73, 0x32, 0x89, 0x01, 0x0a,\n-\t0x0c, 0x4f, 0x46, 0x52, 0x45, 0x50, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x79, 0x0a,\n-\t0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66,\n-\t0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x66, 0x6c, 0x69, 0x70,\n-\t0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69,\n-\t0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n-\t0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e,\n-\t0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65,\n-\t0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,\n-\t0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x23, 0x5a, 0x21, 0x67, 0x6f, 0x2e, 0x66,\n-\t0x6c, 0x69, 0x70, 0x74, 0x2e, 0x69, 0x6f, 0x2f, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2f, 0x72, 0x70,\n-\t0x63, 0x2f, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2f, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x62, 0x06, 0x70,\n-\t0x72, 0x6f, 0x74, 0x6f, 0x33,\n+\t0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x75, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f,\n+\t0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69,\n+\t0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,\n+\t0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d,\n+\t0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02,\n+\t0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72,\n+\t0x65, 0x70, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52,\n+\t0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xa3, 0x01,\n+\t0x0a, 0x0c, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x4d,\n+\t0x0a, 0x12, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61,\n+\t0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x69,\n+\t0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e,\n+\t0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x63, 0x61, 0x63, 0x68,\n+\t0x65, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a,\n+\t0x0f, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n+\t0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f,\n+\t0x66, 0x72, 0x65, 0x70, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74,\n+\t0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x66, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74,\n+\t0x69, 0x6f, 0x6e, 0x22, 0x43, 0x0a, 0x11, 0x43, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6e, 0x76, 0x61,\n+\t0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x70, 0x6f, 0x6c, 0x6c,\n+\t0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x66, 0x6c, 0x69, 0x70,\n+\t0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52,\n+\t0x07, 0x70, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x22, 0x5a, 0x0a, 0x07, 0x50, 0x6f, 0x6c, 0x6c,\n+\t0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01,\n+\t0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x35, 0x0a,\n+\t0x17, 0x6d, 0x69, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x74,\n+\t0x65, 0x72, 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14,\n+\t0x6d, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76,\n+\t0x61, 0x6c, 0x4d, 0x73, 0x22, 0x39, 0x0a, 0x0e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c,\n+\t0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72,\n+\t0x74, 0x65, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52,\n+\t0x0e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2a,\n+\t0x40, 0x0a, 0x0e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f,\n+\t0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0c,\n+\t0x0a, 0x08, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f,\n+\t0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10,\n+\t0x02, 0x32, 0xd9, 0x01, 0x0a, 0x0c, 0x4f, 0x46, 0x52, 0x45, 0x50, 0x53, 0x65, 0x72, 0x76, 0x69,\n+\t0x63, 0x65, 0x12, 0x79, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65,\n+\t0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c,\n+\t0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x47, 0x65, 0x74,\n+\t0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72,\n+\t0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x66,\n+\t0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72,\n+\t0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74,\n+\t0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a,\n+\t0x0c, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x20, 0x2e,\n+\t0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x45, 0x76, 0x61, 0x6c,\n+\t0x75, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,\n+\t0x1a, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x2e, 0x45, 0x76,\n+\t0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x61, 0x67, 0x22, 0x00, 0x42, 0x23, 0x5a,\n+\t0x21, 0x67, 0x6f, 0x2e, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2e, 0x69, 0x6f, 0x2f, 0x66, 0x6c, 0x69,\n+\t0x70, 0x74, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x66, 0x6c, 0x69, 0x70, 0x74, 0x2f, 0x6f, 0x66, 0x72,\n+\t0x65, 0x70, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n }\n \n var (\n@@ -382,27 +601,40 @@ func file_ofrep_ofrep_proto_rawDescGZIP() []byte {\n \treturn file_ofrep_ofrep_proto_rawDescData\n }\n \n-var file_ofrep_ofrep_proto_msgTypes = make([]protoimpl.MessageInfo, 6)\n+var file_ofrep_ofrep_proto_enumTypes = make([]protoimpl.EnumInfo, 1)\n+var file_ofrep_ofrep_proto_msgTypes = make([]protoimpl.MessageInfo, 9)\n var file_ofrep_ofrep_proto_goTypes = []any{\n-\t(*GetProviderConfigurationRequest)(nil),  // 0: flipt.ofrep.GetProviderConfigurationRequest\n-\t(*GetProviderConfigurationResponse)(nil), // 1: flipt.ofrep.GetProviderConfigurationResponse\n-\t(*Capabilities)(nil),                     // 2: flipt.ofrep.Capabilities\n-\t(*CacheInvalidation)(nil),                // 3: flipt.ofrep.CacheInvalidation\n-\t(*Polling)(nil),                          // 4: flipt.ofrep.Polling\n-\t(*FlagEvaluation)(nil),                   // 5: flipt.ofrep.FlagEvaluation\n+\t(EvaluateReason)(0),                      // 0: flipt.ofrep.EvaluateReason\n+\t(*EvaluateFlagRequest)(nil),              // 1: flipt.ofrep.EvaluateFlagRequest\n+\t(*EvaluatedFlag)(nil),                    // 2: flipt.ofrep.EvaluatedFlag\n+\t(*GetProviderConfigurationRequest)(nil),  // 3: flipt.ofrep.GetProviderConfigurationRequest\n+\t(*GetProviderConfigurationResponse)(nil), // 4: flipt.ofrep.GetProviderConfigurationResponse\n+\t(*Capabilities)(nil),                     // 5: flipt.ofrep.Capabilities\n+\t(*CacheInvalidation)(nil),                // 6: flipt.ofrep.CacheInvalidation\n+\t(*Polling)(nil),                          // 7: flipt.ofrep.Polling\n+\t(*FlagEvaluation)(nil),                   // 8: flipt.ofrep.FlagEvaluation\n+\tnil,                                      // 9: flipt.ofrep.EvaluateFlagRequest.ContextEntry\n+\t(*structpb.Value)(nil),                   // 10: google.protobuf.Value\n+\t(*structpb.Struct)(nil),                  // 11: google.protobuf.Struct\n }\n var file_ofrep_ofrep_proto_depIdxs = []int32{\n-\t2, // 0: flipt.ofrep.GetProviderConfigurationResponse.capabilities:type_name -&gt; flipt.ofrep.Capabilities\n-\t3, // 1: flipt.ofrep.Capabilities.cache_invalidation:type_name -&gt; flipt.ofrep.CacheInvalidation\n-\t5, // 2: flipt.ofrep.Capabilities.flag_evaluation:type_name -&gt; flipt.ofrep.FlagEvaluation\n-\t4, // 3: flipt.ofrep.CacheInvalidation.polling:type_name -&gt; flipt.ofrep.Polling\n-\t0, // 4: flipt.ofrep.OFREPService.GetProviderConfiguration:input_type -&gt; flipt.ofrep.GetProviderConfigurationRequest\n-\t1, // 5: flipt.ofrep.OFREPService.GetProviderConfiguration:output_type -&gt; flipt.ofrep.GetProviderConfigurationResponse\n-\t5, // [5:6] is the sub-list for method output_type\n-\t4, // [4:5] is the sub-list for method input_type\n-\t4, // [4:4] is the sub-list for extension type_name\n-\t4, // [4:4] is the sub-list for extension extendee\n-\t0, // [0:4] is the sub-list for field type_name\n+\t9,  // 0: flipt.ofrep.EvaluateFlagRequest.context:type_name -&gt; flipt.ofrep.EvaluateFlagRequest.ContextEntry\n+\t0,  // 1: flipt.ofrep.EvaluatedFlag.reason:type_name -&gt; flipt.ofrep.EvaluateReason\n+\t10, // 2: flipt.ofrep.EvaluatedFlag.value:type_name -&gt; google.protobuf.Value\n+\t11, // 3: flipt.ofrep.EvaluatedFlag.metadata:type_name -&gt; google.protobuf.Struct\n+\t5,  // 4: flipt.ofrep.GetProviderConfigurationResponse.capabilities:type_name -&gt; flipt.ofrep.Capabilities\n+\t6,  // 5: flipt.ofrep.Capabilities.cache_invalidation:type_name -&gt; flipt.ofrep.CacheInvalidation\n+\t8,  // 6: flipt.ofrep.Capabilities.flag_evaluation:type_name -&gt; flipt.ofrep.FlagEvaluation\n+\t7,  // 7: flipt.ofrep.CacheInvalidation.polling:type_name -&gt; flipt.ofrep.Polling\n+\t3,  // 8: flipt.ofrep.OFREPService.GetProviderConfiguration:input_type -&gt; flipt.ofrep.GetProviderConfigurationRequest\n+\t1,  // 9: flipt.ofrep.OFREPService.EvaluateFlag:input_type -&gt; flipt.ofrep.EvaluateFlagRequest\n+\t4,  // 10: flipt.ofrep.OFREPService.GetProviderConfiguration:output_type -&gt; flipt.ofrep.GetProviderConfigurationResponse\n+\t2,  // 11: flipt.ofrep.OFREPService.EvaluateFlag:output_type -&gt; flipt.ofrep.EvaluatedFlag\n+\t10, // [10:12] is the sub-list for method output_type\n+\t8,  // [8:10] is the sub-list for method input_type\n+\t8,  // [8:8] is the sub-list for extension type_name\n+\t8,  // [8:8] is the sub-list for extension extendee\n+\t0,  // [0:8] is the sub-list for field type_name\n }\n \n func init() { file_ofrep_ofrep_proto_init() }\n@@ -412,7 +644,7 @@ func file_ofrep_ofrep_proto_init() {\n \t}\n \tif !protoimpl.UnsafeEnabled {\n \t\tfile_ofrep_ofrep_proto_msgTypes[0].Exporter = func(v any, i int) any {\n-\t\t\tswitch v := v.(*GetProviderConfigurationRequest); i {\n+\t\t\tswitch v := v.(*EvaluateFlagRequest); i {\n \t\t\tcase 0:\n \t\t\t\treturn &amp;v.state\n \t\t\tcase 1:\n@@ -424,7 +656,7 @@ func file_ofrep_ofrep_proto_init() {\n \t\t\t}\n \t\t}\n \t\tfile_ofrep_ofrep_proto_msgTypes[1].Exporter = func(v any, i int) any {\n-\t\t\tswitch v := v.(*GetProviderConfigurationResponse); i {\n+\t\t\tswitch v := v.(*EvaluatedFlag); i {\n \t\t\tcase 0:\n \t\t\t\treturn &amp;v.state\n \t\t\tcase 1:\n@@ -436,7 +668,7 @@ func file_ofrep_ofrep_proto_init() {\n \t\t\t}\n \t\t}\n \t\tfile_ofrep_ofrep_proto_msgTypes[2].Exporter = func(v any, i int) any {\n-\t\t\tswitch v := v.(*Capabilities); i {\n+\t\t\tswitch v := v.(*GetProviderConfigurationRequest); i {\n \t\t\tcase 0:\n \t\t\t\treturn &amp;v.state\n \t\t\tcase 1:\n@@ -448,7 +680,7 @@ func file_ofrep_ofrep_proto_init() {\n \t\t\t}\n \t\t}\n \t\tfile_ofrep_ofrep_proto_msgTypes[3].Exporter = func(v any, i int) any {\n-\t\t\tswitch v := v.(*CacheInvalidation); i {\n+\t\t\tswitch v := v.(*GetProviderConfigurationResponse); i {\n \t\t\tcase 0:\n \t\t\t\treturn &amp;v.state\n \t\t\tcase 1:\n@@ -460,7 +692,7 @@ func file_ofrep_ofrep_proto_init() {\n \t\t\t}\n \t\t}\n \t\tfile_ofrep_ofrep_proto_msgTypes[4].Exporter = func(v any, i int) any {\n-\t\t\tswitch v := v.(*Polling); i {\n+\t\t\tswitch v := v.(*Capabilities); i {\n \t\t\tcase 0:\n \t\t\t\treturn &amp;v.state\n \t\t\tcase 1:\n@@ -472,6 +704,30 @@ func file_ofrep_ofrep_proto_init() {\n \t\t\t}\n \t\t}\n \t\tfile_ofrep_ofrep_proto_msgTypes[5].Exporter = func(v any, i int) any {\n+\t\t\tswitch v := v.(*CacheInvalidation); i {\n+\t\t\tcase 0:\n+\t\t\t\treturn &amp;v.state\n+\t\t\tcase 1:\n+\t\t\t\treturn &amp;v.sizeCache\n+\t\t\tcase 2:\n+\t\t\t\treturn &amp;v.unknownFields\n+\t\t\tdefault:\n+\t\t\t\treturn nil\n+\t\t\t}\n+\t\t}\n+\t\tfile_ofrep_ofrep_proto_msgTypes[6].Exporter = func(v any, i int) any {\n+\t\t\tswitch v := v.(*Polling); i {\n+\t\t\tcase 0:\n+\t\t\t\treturn &amp;v.state\n+\t\t\tcase 1:\n+\t\t\t\treturn &amp;v.sizeCache\n+\t\t\tcase 2:\n+\t\t\t\treturn &amp;v.unknownFields\n+\t\t\tdefault:\n+\t\t\t\treturn nil\n+\t\t\t}\n+\t\t}\n+\t\tfile_ofrep_ofrep_proto_msgTypes[7].Exporter = func(v any, i int) any {\n \t\t\tswitch v := v.(*FlagEvaluation); i {\n \t\t\tcase 0:\n \t\t\t\treturn &amp;v.state\n@@ -489,13 +745,14 @@ func file_ofrep_ofrep_proto_init() {\n \t\tFile: protoimpl.DescBuilder{\n \t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n \t\t\tRawDescriptor: file_ofrep_ofrep_proto_rawDesc,\n-\t\t\tNumEnums:      0,\n-\t\t\tNumMessages:   6,\n+\t\t\tNumEnums:      1,\n+\t\t\tNumMessages:   9,\n \t\t\tNumExtensions: 0,\n \t\t\tNumServices:   1,\n \t\t},\n \t\tGoTypes:           file_ofrep_ofrep_proto_goTypes,\n \t\tDependencyIndexes: file_ofrep_ofrep_proto_depIdxs,\n+\t\tEnumInfos:         file_ofrep_ofrep_proto_enumTypes,\n \t\tMessageInfos:      file_ofrep_ofrep_proto_msgTypes,\n \t}.Build()\n \tFile_ofrep_ofrep_proto = out.File\ndiff --git a/rpc/flipt/ofrep/ofrep.pb.gw.go b/rpc/flipt/ofrep/ofrep.pb.gw.go\nindex 0db623bb..31ccff36 100644\n--- a/rpc/flipt/ofrep/ofrep.pb.gw.go\n+++ b/rpc/flipt/ofrep/ofrep.pb.gw.go\n@@ -49,6 +49,66 @@ func local_request_OFREPService_GetProviderConfiguration_0(ctx context.Context,\n \n }\n \n+func request_OFREPService_EvaluateFlag_0(ctx context.Context, marshaler runtime.Marshaler, client OFREPServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n+\tvar protoReq EvaluateFlagRequest\n+\tvar metadata runtime.ServerMetadata\n+\n+\tif err := marshaler.NewDecoder(req.Body).Decode(&amp;protoReq); err != nil &amp;&amp; err != io.EOF {\n+\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n+\t}\n+\n+\tvar (\n+\t\tval string\n+\t\tok  bool\n+\t\terr error\n+\t\t_   = err\n+\t)\n+\n+\tval, ok = pathParams[\"key\"]\n+\tif !ok {\n+\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"key\")\n+\t}\n+\n+\tprotoReq.Key, err = runtime.String(val)\n+\tif err != nil {\n+\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"key\", err)\n+\t}\n+\n+\tmsg, err := client.EvaluateFlag(ctx, &amp;protoReq, grpc.Header(&amp;metadata.HeaderMD), grpc.Trailer(&amp;metadata.TrailerMD))\n+\treturn msg, metadata, err\n+\n+}\n+\n+func local_request_OFREPService_EvaluateFlag_0(ctx context.Context, marshaler runtime.Marshaler, server OFREPServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n+\tvar protoReq EvaluateFlagRequest\n+\tvar metadata runtime.ServerMetadata\n+\n+\tif err := marshaler.NewDecoder(req.Body).Decode(&amp;protoReq); err != nil &amp;&amp; err != io.EOF {\n+\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n+\t}\n+\n+\tvar (\n+\t\tval string\n+\t\tok  bool\n+\t\terr error\n+\t\t_   = err\n+\t)\n+\n+\tval, ok = pathParams[\"key\"]\n+\tif !ok {\n+\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"key\")\n+\t}\n+\n+\tprotoReq.Key, err = runtime.String(val)\n+\tif err != nil {\n+\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"key\", err)\n+\t}\n+\n+\tmsg, err := server.EvaluateFlag(ctx, &amp;protoReq)\n+\treturn msg, metadata, err\n+\n+}\n+\n // RegisterOFREPServiceHandlerServer registers the http handlers for service OFREPService to \"mux\".\n // UnaryRPC     :call OFREPServiceServer directly.\n // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n@@ -80,6 +140,31 @@ func RegisterOFREPServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu\n \n \t})\n \n+\tmux.Handle(\"POST\", pattern_OFREPService_EvaluateFlag_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n+\t\tctx, cancel := context.WithCancel(req.Context())\n+\t\tdefer cancel()\n+\t\tvar stream runtime.ServerTransportStream\n+\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &amp;stream)\n+\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n+\t\tvar err error\n+\t\tvar annotatedContext context.Context\n+\t\tannotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, \"/flipt.ofrep.OFREPService/EvaluateFlag\", runtime.WithHTTPPathPattern(\"/ofrep/v1/evaluate/flags/{key}\"))\n+\t\tif err != nil {\n+\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n+\t\t\treturn\n+\t\t}\n+\t\tresp, md, err := local_request_OFREPService_EvaluateFlag_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n+\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n+\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n+\t\tif err != nil {\n+\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n+\t\t\treturn\n+\t\t}\n+\n+\t\tforward_OFREPService_EvaluateFlag_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n+\n+\t})\n+\n \treturn nil\n }\n \n@@ -143,13 +228,39 @@ func RegisterOFREPServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu\n \n \t})\n \n+\tmux.Handle(\"POST\", pattern_OFREPService_EvaluateFlag_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n+\t\tctx, cancel := context.WithCancel(req.Context())\n+\t\tdefer cancel()\n+\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n+\t\tvar err error\n+\t\tvar annotatedContext context.Context\n+\t\tannotatedContext, err = runtime.AnnotateContext(ctx, mux, req, \"/flipt.ofrep.OFREPService/EvaluateFlag\", runtime.WithHTTPPathPattern(\"/ofrep/v1/evaluate/flags/{key}\"))\n+\t\tif err != nil {\n+\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n+\t\t\treturn\n+\t\t}\n+\t\tresp, md, err := request_OFREPService_EvaluateFlag_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n+\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n+\t\tif err != nil {\n+\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n+\t\t\treturn\n+\t\t}\n+\n+\t\tforward_OFREPService_EvaluateFlag_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n+\n+\t})\n+\n \treturn nil\n }\n \n var (\n \tpattern_OFREPService_GetProviderConfiguration_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"ofrep\", \"v1\", \"configuration\"}, \"\"))\n+\n+\tpattern_OFREPService_EvaluateFlag_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{\"ofrep\", \"v1\", \"evaluate\", \"flags\", \"key\"}, \"\"))\n )\n \n var (\n \tforward_OFREPService_GetProviderConfiguration_0 = runtime.ForwardResponseMessage\n+\n+\tforward_OFREPService_EvaluateFlag_0 = runtime.ForwardResponseMessage\n )\ndiff --git a/rpc/flipt/ofrep/ofrep.proto b/rpc/flipt/ofrep/ofrep.proto\nindex cd01cde4..e009db4c 100644\n--- a/rpc/flipt/ofrep/ofrep.proto\n+++ b/rpc/flipt/ofrep/ofrep.proto\n@@ -2,8 +2,29 @@ syntax = \"proto3\";\n \n package flipt.ofrep;\n \n+import \"google/protobuf/struct.proto\";\n+\n option go_package = \"go.flipt.io/flipt/rpc/flipt/ofrep\";\n \n+enum EvaluateReason {\n+  DEFAULT = 0;\n+  DISABLED = 1;\n+  TARGETING_MATCH = 2;\n+}\n+\n+message EvaluateFlagRequest {\n+  string key = 1;\n+  map context = 2;\n+}\n+\n+message EvaluatedFlag {\n+  string key = 1;\n+  EvaluateReason reason = 2;\n+  string variant = 3;\n+  google.protobuf.Value value = 4;\n+  google.protobuf.Struct metadata = 5;\n+}\n+\n message GetProviderConfigurationRequest {}\n \n message GetProviderConfigurationResponse {\n@@ -32,4 +53,5 @@ message FlagEvaluation {\n // flipt:sdk:ignore\n service OFREPService {\n   rpc GetProviderConfiguration(GetProviderConfigurationRequest) returns (GetProviderConfigurationResponse) {}\n+  rpc EvaluateFlag(EvaluateFlagRequest) returns (EvaluatedFlag) {}\n }\ndiff --git a/rpc/flipt/ofrep/ofrep_grpc.pb.go b/rpc/flipt/ofrep/ofrep_grpc.pb.go\nindex 62c59ac7..e1057ea4 100644\n--- a/rpc/flipt/ofrep/ofrep_grpc.pb.go\n+++ b/rpc/flipt/ofrep/ofrep_grpc.pb.go\n@@ -20,6 +20,7 @@ const _ = grpc.SupportPackageIsVersion8\n \n const (\n \tOFREPService_GetProviderConfiguration_FullMethodName = \"/flipt.ofrep.OFREPService/GetProviderConfiguration\"\n+\tOFREPService_EvaluateFlag_FullMethodName             = \"/flipt.ofrep.OFREPService/EvaluateFlag\"\n )\n \n // OFREPServiceClient is the client API for OFREPService service.\n@@ -29,6 +30,7 @@ const (\n // flipt:sdk:ignore\n type OFREPServiceClient interface {\n \tGetProviderConfiguration(ctx context.Context, in *GetProviderConfigurationRequest, opts ...grpc.CallOption) (*GetProviderConfigurationResponse, error)\n+\tEvaluateFlag(ctx context.Context, in *EvaluateFlagRequest, opts ...grpc.CallOption) (*EvaluatedFlag, error)\n }\n \n type oFREPServiceClient struct {\n@@ -49,6 +51,16 @@ func (c *oFREPServiceClient) GetProviderConfiguration(ctx context.Context, in *G\n \treturn out, nil\n }\n \n+func (c *oFREPServiceClient) EvaluateFlag(ctx context.Context, in *EvaluateFlagRequest, opts ...grpc.CallOption) (*EvaluatedFlag, error) {\n+\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n+\tout := new(EvaluatedFlag)\n+\terr := c.cc.Invoke(ctx, OFREPService_EvaluateFlag_FullMethodName, in, out, cOpts...)\n+\tif err != nil {\n+\t\treturn nil, err\n+\t}\n+\treturn out, nil\n+}\n+\n // OFREPServiceServer is the server API for OFREPService service.\n // All implementations must embed UnimplementedOFREPServiceServer\n // for forward compatibility\n@@ -56,6 +68,7 @@ func (c *oFREPServiceClient) GetProviderConfiguration(ctx context.Context, in *G\n // flipt:sdk:ignore\n type OFREPServiceServer interface {\n \tGetProviderConfiguration(context.Context, *GetProviderConfigurationRequest) (*GetProviderConfigurationResponse, error)\n+\tEvaluateFlag(context.Context, *EvaluateFlagRequest) (*EvaluatedFlag, error)\n \tmustEmbedUnimplementedOFREPServiceServer()\n }\n \n@@ -66,6 +79,9 @@ type UnimplementedOFREPServiceServer struct {\n func (UnimplementedOFREPServiceServer) GetProviderConfiguration(context.Context, *GetProviderConfigurationRequest) (*GetProviderConfigurationResponse, error) {\n \treturn nil, status.Errorf(codes.Unimplemented, \"method GetProviderConfiguration not implemented\")\n }\n+func (UnimplementedOFREPServiceServer) EvaluateFlag(context.Context, *EvaluateFlagRequest) (*EvaluatedFlag, error) {\n+\treturn nil, status.Errorf(codes.Unimplemented, \"method EvaluateFlag not implemented\")\n+}\n func (UnimplementedOFREPServiceServer) mustEmbedUnimplementedOFREPServiceServer() {}\n \n // UnsafeOFREPServiceServer may be embedded to opt out of forward compatibility for this service.\n@@ -97,6 +113,24 @@ func _OFREPService_GetProviderConfiguration_Handler(srv interface{}, ctx context\n \treturn interceptor(ctx, in, info, handler)\n }\n \n+func _OFREPService_EvaluateFlag_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n+\tin := new(EvaluateFlagRequest)\n+\tif err := dec(in); err != nil {\n+\t\treturn nil, err\n+\t}\n+\tif interceptor == nil {\n+\t\treturn srv.(OFREPServiceServer).EvaluateFlag(ctx, in)\n+\t}\n+\tinfo := &amp;grpc.UnaryServerInfo{\n+\t\tServer:     srv,\n+\t\tFullMethod: OFREPService_EvaluateFlag_FullMethodName,\n+\t}\n+\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n+\t\treturn srv.(OFREPServiceServer).EvaluateFlag(ctx, req.(*EvaluateFlagRequest))\n+\t}\n+\treturn interceptor(ctx, in, info, handler)\n+}\n+\n // OFREPService_ServiceDesc is the grpc.ServiceDesc for OFREPService service.\n // It's only intended for direct use with grpc.RegisterService,\n // and not to be introspected or modified (even as a copy)\n@@ -108,6 +142,10 @@ var OFREPService_ServiceDesc = grpc.ServiceDesc{\n \t\t\tMethodName: \"GetProviderConfiguration\",\n \t\t\tHandler:    _OFREPService_GetProviderConfiguration_Handler,\n \t\t},\n+\t\t{\n+\t\t\tMethodName: \"EvaluateFlag\",\n+\t\t\tHandler:    _OFREPService_EvaluateFlag_Handler,\n+\t\t},\n \t},\n \tStreams:  []grpc.StreamDesc{},\n \tMetadata: \"ofrep/ofrep.proto\",\n", "creation_timestamp": "2026-07-27T00:52:06.504677Z"}, {"uuid": "498e136c-d265-45a2-a256-c4dcdb7e8839", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/Positive_Technologies/1971", "content": "\ud83d\udd25 \u0415\u0449\u0435 \u043e\u0434\u043d\u0430 \u0442\u0440\u0435\u043d\u0434\u043e\u0432\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CVE-2023-44487.\n\n\u042d\u0442\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 HTTP/2 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f DDoS-\u0430\u0442\u0430\u043a. \u0410\u0442\u0430\u043a\u0430 \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u044d\u0442\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430 \u0438\u043c\u044f HTTP/2 Rapid Reset. \n\n\ud83d\udc7e\u0427\u0435\u043c \u043e\u043f\u0430\u0441\u043d\u043e\n\n\u0414\u043b\u044f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0435\u0441\u0441\u0438\u0439 HTTP/2 \u0438, \u043d\u0435 \u0434\u043e\u0436\u0438\u0434\u0430\u044f\u0441\u044c \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0440\u0430\u0437\u0440\u044b\u0432\u0430\u044e\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 RST_STREAM. \u042d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u0432\u044b\u0437\u044b\u0432\u0430\u044f \u043e\u0442\u043a\u0430\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438. \u041f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0430\u0442\u0430\u043a\u0438 \u0443\u0436\u0435 \u0431\u044b\u043b\u0438 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u0445 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0445 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 Google \u0438 Cloudflare.\n\n\u2757\ufe0f\u0414\u043b\u044f \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f CVE-2023-44487 \u0441\u043b\u0435\u0434\u0443\u0439\u0442\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u043c \u0432\u0435\u043d\u0434\u043e\u0440\u043e\u0432. \u0414\u0435\u043b\u0438\u043c\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0438\u0436\u0435. Microsoft \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f IIS (HTTP.sys) \u0438 .NET (Kestrel). Apache Software Foundation \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Tomcat, \u0430 F5 \u2014 \u0434\u043b\u044f Nginx. \n\n\u26a0\ufe0f \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c\n\n\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0443\u0437\u043b\u044b \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 CVE-2023-44487 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e MaxPatrol VM. \u0415\u0441\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u044b \u0437\u043d\u0430\u043d\u0438\u0439, \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0435 \u0430\u043a\u0442\u0438\u0432\u044b \u0431\u0443\u0434\u0443\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.\n\n@Positive_Technologies\n#\u0432\u0442\u0440\u0435\u043d\u0434\u0435VM", "creation_timestamp": "2026-07-27T00:01:26.943286Z"}, {"uuid": "e0044c40-5281-4afb-a6f8-f29b5063850b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/EchelonEyes/2057", "content": "\u0412 \u043e\u043a\u0442\u044f\u0431\u0440\u044c\u0441\u043a\u043e\u043c \u043f\u0430\u0442\u0447e Microsoft \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 103 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u0434\u0432\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f\n\n\u0418\u0437 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0441\u043e\u0442\u043d\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, 13 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435, 90 \u2013 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0435. \u042d\u0442\u043e \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044f 18 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 Edge \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u0442\u0447\u0435.\n\n\u041a \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u043c \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f:\n\n- CVE-2023-36563 (\u043e\u0446\u0435\u043d\u043a\u0430 CVSS: 6,5), \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0430\u044f \u0441 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 Microsoft WordPad, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0443\u0442\u0435\u0447\u043a\u0435 NTLM-\u0445\u0435\u0448\u0435\u0439;\n\n- CVE-2023-41763 (\u043e\u0446\u0435\u043d\u043a\u0430 CVSS: 5,3) \u2014 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439 \u0432 Skype \u0434\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0430, \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, \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u043a IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u043d\u043e\u043c\u0435\u0440\u0430 \u043f\u043e\u0440\u0442\u043e\u0432, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0441\u0435\u0442\u044f\u043c.\n\n\u00ab\u0427\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c\u044e, \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043e\u0439\u0442\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u0417\u0430\u0442\u0435\u043c \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439\u00bb, \u2014 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 Microsoft.\n\n\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0445\u0430\u043a\u0435\u0440\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c \u0436\u0435\u0440\u0442\u0432\u0443 \u043d\u0430\u0436\u0430\u0442\u044c \u043d\u0430 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u0432 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u043c \u043f\u0438\u0441\u044c\u043c\u0435 \u0438\u043b\u0438 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438.\n\n\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u043a, \u0432\u043b\u0438\u044f\u044e\u0449\u0438\u0445 \u043d\u0430 Microsoft Message Queuing (MSMQ) \u0438 Layer 2 Tunneling Protocol (L2TOP), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u043b\u0438 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \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 \u0438 \u043e\u0442\u043a\u0430\u0437\u0443 \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438 (DoS).\n\n\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0442\u0430\u043a\u0436\u0435 \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439 \u0432 Windows IIS Server (CVE-2023-36434, \u043e\u0446\u0435\u043d\u043a\u0430 CVSS: 9,8), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0433\u043b\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443 \u0432\u044b\u0434\u0430\u0442\u044c \u0441\u0435\u0431\u044f \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0432\u043e\u0439\u0442\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0442\u0430\u043a\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430.\n\n\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u043b\u043e \u0438 \u043d\u0435\u0434\u0430\u0432\u043d\u044e\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0434\u043d\u044f \u0434\u043b\u044f CVE-2023-44487, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0430\u0442\u0430\u043a\u0438 HTTP/2 Rapid Reset. \n\n\u00ab\u0425\u043e\u0442\u044f \u044d\u0442\u0430 DDoS-\u0430\u0442\u0430\u043a\u0430 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0443\u0441\u043b\u0443\u0433, \u043e\u043d\u0430 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432, \u0438 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u044b \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c\u0441\u0442\u0432 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0431\u044b\u043b\u0438 \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b\u00bb, \u2014 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u0442\u0435\u0445\u0433\u0438\u0433\u0430\u043d\u0442\u0430.\n\n\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Microsoft \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0430 \u043e \u0441\u043d\u044f\u0442\u0438\u0438 \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 Visual Basic Script (\u043e\u043d \u0436\u0435 VBScript), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \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\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u0434\u043e\u0431\u0430\u0432\u0438\u0432, \u0447\u0442\u043e \u00ab\u0432 \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0445 Windows VBScript \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044e \u0434\u043e \u0435\u0433\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0438\u0437 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b\u00bb.\n\n\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: https://msrc.microsoft.com/update-guide/releaseNote/2023-Oct \n\n#\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438", "creation_timestamp": "2026-07-28T00:00:30.464491Z"}, {"uuid": "c1a147dd-04e9-4db6-8b42-c6ed3fd86df3", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "published-proof-of-concept", "source": "https://t.me/EchelonEyes/2053", "content": "\u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0434\u043d\u044f HTTP/2 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0435\u0431\u044b\u0432\u0430\u043b\u044b\u043c DDoS-\u0430\u0442\u0430\u043a\u0430\u043c\n\nAmazon Web Services (AWS), Cloudflare \u0438 Google \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0437\u0430\u044f\u0432\u0438\u043b\u0438, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u044f\u043b\u0438 \u0448\u0430\u0433\u0438 \u043f\u043e \u0441\u043c\u044f\u0433\u0447\u0435\u043d\u0438\u044e \u0440\u0435\u043a\u043e\u0440\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0430\u0442\u0430\u043a \u0442\u0438\u043f\u0430 \u00ab\u043e\u0442\u043a\u0430\u0437 \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438\u00bb (DDoS), \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043d\u043e\u0432\u043e\u0439 \u0442\u0435\u0445\u043d\u0438\u043a\u0435 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c HTTP/2 Rapid Reset.\n\n\u0410\u0442\u0430\u043a\u0438 7-\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0431\u044b\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b \u0432 \u043a\u043e\u043d\u0446\u0435 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 2023 \u0433\u043e\u0434\u0430. \u0412 \u043e\u0441\u043d\u043e\u0432\u0435 \u0438\u0445 \u2013 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 CVE-2023-44487 (\u043e\u0446\u0435\u043d\u043a\u0430 CVSS 7,5). \u0410\u0442\u0430\u043a\u0438 7-\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0438\u043b\u0438 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u043d\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u044e\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0442\u0435\u0432\u044b\u0435, \u043d\u043e \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b.\n\n\u0422\u0430\u043a, \u0430\u0442\u0430\u043a\u0438, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u043e\u0431\u043b\u0430\u0447\u043d\u0443\u044e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 Google, \u0434\u043e\u0441\u0442\u0438\u0433\u043b\u0438 \u043f\u0438\u043a\u0430 \u0432 398 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 (RPS), AWS \u2013 \u0441\u0432\u044b\u0448\u0435 155 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432, Cloudflare \u2013 201 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.\n\n\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 HTTP/2 Rapid Reset \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0434\u043d\u044f \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 HTTP/2, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f DDoS-\u0430\u0442\u0430\u043a. \u0412\u0430\u0436\u043d\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e HTTP/2 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 TCP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432.\n\n\u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043a\u043b\u0438\u0435\u043d\u0442, \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0439 \u043f\u0440\u0435\u0440\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441, \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u0434\u0440 RST_STREAM \u0434\u043b\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043e\u0431\u043c\u0435\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u0410\u0442\u0430\u043a\u0430 Rapid Reset \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0438 \u043e\u0442\u043c\u0435\u043d\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u043e\u0439\u0442\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0438 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440, \u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u043e\u0433\u0430.\n\n\u00ab\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u0430 \u0441\u0435\u0440\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u0431\u0440\u043e\u0441\u043e\u043c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u044d\u0442\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u0426\u0435\u043b\u0435\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044f \u0436\u0443\u0440\u043d\u0430\u043b\u044b \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0442\u0435\u043c \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u043b\u0438 \u043e\u0442\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c\u00bb, - \u043f\u043e\u044f\u0441\u043d\u044f\u044e\u0442 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 AWS.\n\n\u042d\u0442\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044e \u0438\u043c\u0435\u0442\u044c \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0448\u043a\u0432\u0430\u043b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 HTTP/2, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0435\u0432\u0437\u043e\u0439\u0442\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u0430 \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u043e\u0432\u044b\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b.\n\n\u0414\u0440\u0443\u0433\u0430\u044f \u0432\u0430\u0436\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u2013 \u0442\u0430\u043a\u0438\u0435 \u0430\u0442\u0430\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u043e\u0442\u043d\u0435\u0442\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043e\u043a\u043e\u043b\u043e 20 000 \u043c\u0430\u0448\u0438\u043d, \u043f\u0438\u0448\u0435\u0442 Cloudflare.\n\n\u041f\u043e \u0434\u0430\u043d\u043d\u044b\u043c W3Techs, HTTP/2 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f 35,6% \u0432\u0441\u0435\u0445 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u043e\u0432. \n\n\u0412 Google Cloud \u0437\u0430\u044f\u0432\u0438\u043b\u0438, \u0447\u0442\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0430\u0442\u0430\u043a Rapid Reset, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0445\u043e\u0442\u044f \u0438 \u043d\u0435 \u0442\u0430\u043a \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b, \u043a\u0430\u043a \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f, \u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b, \u0447\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 DDoS-\u0430\u0442\u0430\u043a\u0438 HTTP/2.\n\nF5 \u0432 \u0441\u0432\u043e\u0435\u043c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u0437\u0430\u044f\u0432\u0438\u043b\u0430, \u0447\u0442\u043e \u0430\u0442\u0430\u043a\u0430 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u043b\u0430 \u043c\u043e\u0434\u0443\u043b\u044c NGINX HTTP/2, \u0438 \u043f\u0440\u0438\u0437\u0432\u0430\u043b\u0430 \u0441\u0432\u043e\u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e NGINX, \u0447\u0442\u043e\u0431\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u043e 128 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c HTTP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0434\u043e 1000 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.\n\n\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438: \n\nhttps://blog.cloudflare.com/zero-day-rapid-reset-http2-record-breaking-ddos-attack/ \n\nhttps://cloud.google.com/blog/products/identity-security/how-it-works-the-novel-http2-rapid-reset-ddos-attack \n\nhttps://aws.amazon.com/blogs/security/how-aws-protects-customers-from-ddos-events/\n\n#DDoS", "creation_timestamp": "2026-07-28T00:00:30.230424Z"}, {"uuid": "3a743fa1-d170-4522-ae69-df5ad4bfb21b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2023-44487", "type": "seen", "source": "https://t.me/Positive_Technologies/1971", "content": "\ud83d\udd25 \u0415\u0449\u0435 \u043e\u0434\u043d\u0430 \u0442\u0440\u0435\u043d\u0434\u043e\u0432\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CVE-2023-44487.\n\n\u042d\u0442\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 HTTP/2 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f DDoS-\u0430\u0442\u0430\u043a. \u0410\u0442\u0430\u043a\u0430 \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u044d\u0442\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430 \u0438\u043c\u044f HTTP/2 Rapid Reset. \n\n\ud83d\udc7e\u0427\u0435\u043c \u043e\u043f\u0430\u0441\u043d\u043e\n\n\u0414\u043b\u044f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0435\u0441\u0441\u0438\u0439 HTTP/2 \u0438, \u043d\u0435 \u0434\u043e\u0436\u0438\u0434\u0430\u044f\u0441\u044c \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0440\u0430\u0437\u0440\u044b\u0432\u0430\u044e\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 RST_STREAM. \u042d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u0432\u044b\u0437\u044b\u0432\u0430\u044f \u043e\u0442\u043a\u0430\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438. \u041f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0430\u0442\u0430\u043a\u0438 \u0443\u0436\u0435 \u0431\u044b\u043b\u0438 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u0445 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0445 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 Google \u0438 Cloudflare.\n\n\u2757\ufe0f\u0414\u043b\u044f \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f CVE-2023-44487 \u0441\u043b\u0435\u0434\u0443\u0439\u0442\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u043c \u0432\u0435\u043d\u0434\u043e\u0440\u043e\u0432. \u0414\u0435\u043b\u0438\u043c\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0438\u0436\u0435. Microsoft \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f IIS (HTTP.sys) \u0438 .NET (Kestrel). Apache Software Foundation \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Tomcat, \u0430 F5 \u2014 \u0434\u043b\u044f Nginx. \n\n\u26a0\ufe0f \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c\n\n\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0443\u0437\u043b\u044b \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 CVE-2023-44487 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e MaxPatrol VM. \u0415\u0441\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u044b \u0437\u043d\u0430\u043d\u0438\u0439, \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0435 \u0430\u043a\u0442\u0438\u0432\u044b \u0431\u0443\u0434\u0443\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.\n\n@Positive_Technologies\n#\u0432\u0442\u0440\u0435\u043d\u0434\u0435VM", "creation_timestamp": "2026-07-28T18:00:06.226924Z"}]}