├── .env.example ├── .github └── workflows │ └── release-please.yaml ├── .gitignore ├── CHANGELOG.md ├── README.md ├── assets ├── crawle_alerts.png ├── get_alert.png ├── get_alerts.png ├── postman.png ├── saudiCERTBackground.png └── systemDiagram1.png ├── functions ├── alerts │ ├── get_alert.py │ └── get_alerts.py └── crewler │ ├── crawle_alerts_ar.py │ └── crawle_alerts_en.py └── http.http /.env.example: -------------------------------------------------------------------------------- 1 | MONGO_URI= -------------------------------------------------------------------------------- /.github/workflows/release-please.yaml: -------------------------------------------------------------------------------- 1 | name: Release Please 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | permissions: 9 | contents: write 10 | pull-requests: write 11 | 12 | jobs: 13 | release-please: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - name: Checkout Repository 17 | uses: actions/checkout@v3 18 | 19 | - name: Release Please 20 | uses: google-github-actions/release-please-action@v3 21 | with: 22 | release-type: node 23 | package-name: saudi-cert-api 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | crawle_alerts_ar 2 | .env -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## [1.1.0](https://github.com/qahta0/Saudi-CERT-API/compare/v1.0.0...v1.1.0) (2023-11-15) 4 | 5 | 6 | ### Features 7 | 8 | * add query param for choosing the language (ar & en) ([77ff766](https://github.com/qahta0/Saudi-CERT-API/commit/77ff76698bde99096dafc175e2f28e65dddf2c57)) 9 | * add query param for choosing the language (ar & en) ([5140808](https://github.com/qahta0/Saudi-CERT-API/commit/51408083f5763e705cc142894fa628ef5e6a12a8)) 10 | 11 | ## 1.0.0 (2023-11-15) 12 | 13 | 14 | ### Features 15 | 16 | * add search function ([a605455](https://github.com/qahta0/Saudi-CERT-API/commit/a6054553a8bae4032ff7dcd7f47df4ae440aad4f)) 17 | * add unique alerts to the db ([a3b9a9f](https://github.com/qahta0/Saudi-CERT-API/commit/a3b9a9f4d5c22ce7f41bb02f14ab256cb5e7f64c)) 18 | 19 | 20 | ### Bug Fixes 21 | 22 | * update release-please.yaml ([9692308](https://github.com/qahta0/Saudi-CERT-API/commit/9692308d07a765ea5b718d4743268007d686715d)) 23 | * update release-please.yaml ([1c81363](https://github.com/qahta0/Saudi-CERT-API/commit/1c813632379cfba2750d23a3395bd24ae04da0b4)) 24 | * update release-please.yaml ([bb0df07](https://github.com/qahta0/Saudi-CERT-API/commit/bb0df07f6ebd9583a02f5efbef0f18278026c4ee)) 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Saudi Cert Lambda (Parser & Public API) 🚀 2 | 3 | ![Saudi CERT](./assets/saudiCERTBackground.png) 4 | 5 | 6 | ## Revised Goal 7 | 8 | This repository features a specialized tool and API for Saudi CERT alerts, focusing on bolstering online safety in Saudi Arabia. Utilizing AWS Lambda, it efficiently gathers and organizes Saudi CERT's alerts, providing easy access through a public API. 9 | 10 | In its pursuit, the project prioritizes offering the latest data on emerging cybersecurity threats. This approach ensures individuals and organizations are well-informed and prepared to tackle modern digital security challenges. 11 | 12 | ## Status 13 | 14 | ![deployed-aws-lamdba](https://img.shields.io/badge/Deployed-AWS--Lambda-green?style=flat) 15 | ![python](https://img.shields.io/badge/Python-v3.11-blue?style=flat) 16 | ![MongoDB](https://img.shields.io/badge/MongoDB-AtlasGCP-red?style=flat) 17 | ![Postman](https://img.shields.io/badge/Docs-Postman-orange?style=flat) 18 | 19 | ## Tech Used 20 | ![MongoDB](https://img.shields.io/badge/MongoDB-database-green?style=for-the-badge&logo=mongodb) 21 | ![Python](https://img.shields.io/badge/Python-blue?style=for-the-badge&logo=python) 22 | 23 | 24 | ## Documentation in Postamn 25 | 26 | You can find the api documentation, and also you can test the api endpoints from here 🚀 27 | 28 | `https://www.postman.com/anqahtani/workspace/saudi-cert-api/collection/30891854-1352c7be-f75f-4677-907e-faf39d50f8cb?action=share&creator=30891854` 29 | 30 | ![Postman](./assets/postman.png) 31 | 32 | ## Overview 📖 33 | 34 | ![Saudi CERT Logo](https://cert.gov.sa/static/img/CERT-logo-white.0bfc797b46cc.svg) 35 | 36 | This repository has a tool and an API for Saudi CERT alerts. Its goal is to help improve online safety knowledge in Saudi Arabia. Using AWS Lambda, this project takes Saudi CERT's alerts, organizes them, and makes them easy to get through a public API. 37 | 38 | These AWS Lambda function are designed to retrieve security alerts from a MongoDB database. It supports querying alerts by various attributes such as ID, title, severity, and more. 39 | 40 | ## Features ✨ 41 | - Fetch alerts by ID or other specified attributes. 42 | - Serverless approach leveraging AWS Lambda. 43 | - Integration with MongoDB. 44 | - Supported Arabic & English languages 45 | 46 | ## Deployment Status ✅ 47 | The Lambda function has been successfully deployed and is operational. 48 | 49 | ## Setup 🔧 50 | - Ensure MongoDB is set up with your alerts data. 51 | - Deploy the Lambda function with the necessary environment variables (e.g., `MONGO_URI`). 52 | - Configure Lambda to interact with your MongoDB instance. 53 | 54 | ## Usage 💡 55 | Invoke the function via AWS SDK or an API Gateway endpoint with appropriate query parameters to retrieve alerts. 56 | 57 | 58 | ## System Diagram 59 | 60 | ![System Diagram](./assets/systemDiagram1.png) 61 | 62 | ## Testing 63 | 64 | You can test endpoints by using the following http.http file 😉 65 | 66 | ```http 67 | ### 68 | # Get Alerts - Fetch multiple alerts with optional query parameters 69 | # Basic usage without query parameters 70 | GET https://1tozt5y6hl.execute-api.us-east-1.amazonaws.com/default/get_alerts 71 | 72 | # Usage with query parameters 73 | GET https://1tozt5y6hl.execute-api.us-east-1.amazonaws.com/default/get_alerts?page=1&limit=5 74 | 75 | # Fetching alerts based on specific attributes like title or severity 76 | GET https://1tozt5y6hl.execute-api.us-east-1.amazonaws.com/default/get_alerts?title=Weekly%20Vulnerability&severity=Critical 77 | 78 | ### 79 | # Get Alert - Fetch a single alert by its ID 80 | # Replace with the actual ID of the alert 81 | GET https://sas5g5ymqb.execute-api.us-east-1.amazonaws.com/default/get_alert?alert_id= 82 | 83 | # Example with a placeholder ID 84 | GET https://sas5g5ymqb.execute-api.us-east-1.amazonaws.com/default/get_alert?alert_id=5f50c31e8eabf80018e4b255 85 | ``` 86 | 87 | Also you can test through curl 😉 88 | 89 | ```sh 90 | # Fetching Multiple Alerts Without Query Parameters 91 | $ curl "https://1tozt5y6hl.execute-api.us-east-1.amazonaws.com/default/get_alerts" 92 | 93 | # Fetching Multiple Alerts With Query Parameters 94 | $ curl "https://1tozt5y6hl.execute-api.us-east-1.amazonaws.com/default/get_alerts?page=1&limit=5" 95 | 96 | # Fetching Alerts Based on Specific Attributes 97 | $ curl "https://sas5g5ymqb.execute-api.us-east-1.amazonaws.com/default/get_alert?title=Weekly%20Vulnerability&severity=Critical" 98 | 99 | # Fetching a Single Alert by ID For this, you need to replace with the actual ID of the alert. 100 | $ curl "https://sas5g5ymqb.execute-api.us-east-1.amazonaws.com/default/get_alert?id=6554e21e7573c0e94fb0db30" 101 | ``` 102 | 103 | 104 | ## Endpoints 105 | 106 | | Description | Method | URL | Notes | 107 | |-------------|--------|-----|---------------| 108 | | **Get Alerts**
Fetch multiple alerts | `GET` | `https://1tozt5y6hl.execute-api.us-east-1.amazonaws.com/default/get_alerts` | Basic usage without query parameters | 109 | | **Get Alerts with Parameters**
Fetch alerts with pagination | `GET` | `https://1tozt5y6hl.execute-api.us-east-1.amazonaws.com/default/get_alerts?page=1&limit=5` | Fetches alerts with page 1 and limit 5 | 110 | | **Get Alerts by Attributes**
Fetch alerts based on title or severity | `GET` | `https://1tozt5y6hl.execute-api.us-east-1.amazonaws.com/default/get_alerts?title=Weekly%20Vulnerability&severity=Critical` | Fetches alerts with specific title and severity | 111 | | **Get Alert by ID**
Fetch a single alert | `GET` | `https://sas5g5ymqb.execute-api.us-east-1.amazonaws.com/default/get_alert?alert_id=` | Replace `` with the actual ID | 112 | | **Example Get Alert**
Example with a placeholder ID | `GET` | `https://sas5g5ymqb.execute-api.us-east-1.amazonaws.com/default/get_alert?alert_id=5f50c31e8eabf80018e4b255` | Example using a specific alert ID | 113 | 114 | 115 | ## Responses 116 | 117 | ### Get Alert (ID) ⚠️ 118 | 119 | `https://sas5g5ymqb.execute-api.us-east-1.amazonaws.com/default/get_alert?id=65536f5d500c2238622268d8` 120 | 121 | ```json 122 | { 123 | "alert": { 124 | "_id": { 125 | "$oid": "65536f5d500c2238622268d8" 126 | }, 127 | "title": "Weekly Vulnerabilitie…", 128 | "severity": "Critical", 129 | "logo": "https://cert.gov.sa/media/non_XcxHHds.jpg", 130 | "alert_url": "https://cert.gov.sa/en/security-warnings/weekly-vulnerabilities-summary-29-october-4-november/", 131 | "details": { 132 | "warning_date": "12 November, 2023", 133 | "severity_level": "● Critical", 134 | "warning_number": "2023-5891", 135 | "target_sector": "All", 136 | "p_1": "Warning Date", 137 | "p_2": "Severity Level", 138 | "p_3": "Warning Number", 139 | "p_4": "Target Sector", 140 | "p_5": "12 November, 2023", 141 | "p_6": "● Critical", 142 | "p_7": "2023-5891", 143 | "p_8": "All", 144 | "link_9": "/documents/137/Weekly_Vulnerabilities_Summary_29_October_4_November.pdf", 145 | "p_10": "Description:", 146 | "p_11": "We provide the weekly summary of published vulnerabilities by the National Institute of Standards and Technology (NIST) National Vulnerability Database (NVD) for the week from 29th of October to 4th of November. Vulnerabilities are scored using the Common Vulnerability Scoring System (CVSS) standard as per the following severity:", 147 | "i_1": "Critical: CVSS base score of 9.0-10.0", 148 | "i_2": "High: CVSS base score of 7.0-8.9", 149 | "i_3": "Medium: CVSS base score 4.0-6.9", 150 | "i_4": "Low: CVSS base score 0.0-3.9", 151 | "link_12": "/documents/137/Weekly_Vulnerabilities_Summary_29_October_4_November.pdf", 152 | "p_13": "We provide the vulnerability information as published by NIST’s NVD. In addition, it is the entity’s or individual’s responsibility to ensure the implementation of appropriate recommendations." 153 | } 154 | } 155 | } 156 | ``` 157 | 158 | `https://sas5g5ymqb.execute-api.us-east-1.amazonaws.com/default/get_alert?id=6555366754572009bcd38905&lang=ar` 159 | 160 | ```json 161 | { 162 | "alert": { 163 | "_id": { 164 | "$oid": "6555366754572009bcd38905" 165 | }, 166 | "title": "تنبيه Adobe", 167 | "severity": "عالٍ جدًا", 168 | "logo": "https://cert.gov.sa/media/Adobe_rG1RtZq.png", 169 | "alert_url": "https://cert.gov.sa/ar/security-warnings/adobe-alert1114/", 170 | "details": { 171 | "warning_date": "14 نوفمبر, 2023", 172 | "severity_level": "● عالٍ جدًا", 173 | "warning_number": "2023-5898", 174 | "target_sector": "الكل", 175 | "p_1": "تاريخ التحذير", 176 | "p_2": "مستوى الخطورة", 177 | "p_3": "رقم التحذير", 178 | "p_4": "القطاع المستهدف", 179 | "p_5": "14 نوفمبر, 2023", 180 | "p_6": "● عالٍ جدًا", 181 | "p_7": "2023-5898", 182 | "p_8": "الكل", 183 | "link_9": "https://helpx.adobe.com/security/products/coldfusion/apsb23-52.html", 184 | "p_10": "", 185 | "p_11": "الوصف:", 186 | "p_12": "أصدرت Adobe عدّة تحديثات لمعالجة عدد من الثغرات في منتجاتها.", 187 | "p_13": "الاجراءات الوقائية:", 188 | "p_14": "يوصي المركز بتحديث النسخ المتأثرة حيث أصدرت Adobe توضيحًا لهذه التحديثات:", 189 | "i_1": "·https://helpx.adobe.com/security/products/coldfusion/apsb23-52.html", 190 | "i_2": "·https://helpx.adobe.com/security/products/robohelp-server/apsb23-53.html", 191 | "i_3": "·https://helpx.adobe.com/security/products/acrobat/apsb23-54.html", 192 | "i_4": "·https://helpx.adobe.com/security/products/photoshop/apsb23-56.html", 193 | "i_5": "·https://helpx.adobe.com/security/products/framemaker/apsb23-58.html", 194 | "i_6": "·https://helpx.adobe.com/security/products/incopy/apsb23-60.html", 195 | "i_7": "·https://helpx.adobe.com/security/products/media-encoder/apsb23-63.html", 196 | "i_8": "·https://helpx.adobe.com/security/products/audition/apsb23-64.html", 197 | "i_9": "·https://helpx.adobe.com/security/products/premiere_pro/apsb23-65.html", 198 | "i_10": "·https://helpx.adobe.com/security/products/after_effects/apsb23-66.html" 199 | } 200 | } 201 | } 202 | ``` 203 | 204 | ### Get Alert (Query Parameters) ⚠️ 205 | 206 | `https://sas5g5ymqb.execute-api.us-east-1.amazonaws.com/default/get_alert?title=Google%20Chrome%20Alert` 207 | 208 | ```json 209 | { 210 | { 211 | "status": "success", 212 | "message": "Alerts retrieved successfully", 213 | "total_alerts": 62, 214 | "alerts": [ 215 | { 216 | "_id": { 217 | "$oid": "6554e21d7573c0e94fb0db2c" 218 | }, 219 | "title": "Weekly Vulnerabilitie…", 220 | "severity": "Critical", 221 | "logo": "https://cert.gov.sa/media/non_XcxHHds.jpg", 222 | "alert_url": "https://cert.gov.sa/en/security-warnings/weekly-vulnerabilities-summary-29-october-4-november/", 223 | "details": { 224 | "warning_date": "12 November, 2023", 225 | "severity_level": "● Critical", 226 | "warning_number": "2023-5891", 227 | "target_sector": "All", 228 | "p_1": "Warning Date", 229 | "p_2": "Severity Level", 230 | "p_3": "Warning Number", 231 | "p_4": "Target Sector", 232 | "p_5": "12 November, 2023", 233 | "p_6": "● Critical", 234 | "p_7": "2023-5891", 235 | "p_8": "All", 236 | "link_9": "/documents/137/Weekly_Vulnerabilities_Summary_29_October_4_November.pdf", 237 | "p_10": "Description:", 238 | "p_11": "We provide the weekly summary of published vulnerabilities by the National Institute of Standards and Technology (NIST) National Vulnerability Database (NVD) for the week from 29th of October to 4th of November. Vulnerabilities are scored using the Common Vulnerability Scoring System (CVSS) standard as per the following severity:", 239 | "i_1": "Critical: CVSS base score of 9.0-10.0", 240 | "i_2": "High: CVSS base score of 7.0-8.9", 241 | "i_3": "Medium: CVSS base score 4.0-6.9", 242 | "i_4": "Low: CVSS base score 0.0-3.9", 243 | "link_12": "/documents/137/Weekly_Vulnerabilities_Summary_29_October_4_November.pdf", 244 | "p_13": "We provide the vulnerability information as published by NIST’s NVD. In addition, it is the entity’s or individual’s responsibility to ensure the implementation of appropriate recommendations." 245 | } 246 | }, 247 | { 248 | "_id": { 249 | "$oid": "6554e21d7573c0e94fb0db2d" 250 | }, 251 | "title": "Foxit Alert", 252 | "severity": "High", 253 | "logo": "https://cert.gov.sa/media/FOX_IT_cAD4gnL.png", 254 | "alert_url": "https://cert.gov.sa/en/security-warnings/foxit-alert1111/", 255 | "details": { 256 | "warning_date": "11 November, 2023", 257 | "severity_level": "● High", 258 | "warning_number": "2023-5890", 259 | "target_sector": "All", 260 | "p_1": "Warning Date", 261 | "p_2": "Severity Level", 262 | "p_3": "Warning Number", 263 | "p_4": "Target Sector", 264 | "p_5": "11 November, 2023", 265 | "p_6": "● High", 266 | "p_7": "2023-5890", 267 | "p_8": "All", 268 | "link_9": "https://www.foxit.com/support/security-bulletins.html", 269 | "p_10": "", 270 | "p_11": "Description:", 271 | "p_12": "Foxit has released a security update to address a vulnerability in their products.", 272 | "p_13": "Best practice and Recommendations:", 273 | "p_14": "The CERT team encourages users to review Foxit security advisory and update the affected products:", 274 | "i_1": "https://www.foxit.com/support/security-bulletins.html" 275 | } 276 | }, 277 | { 278 | "_id": { 279 | "$oid": "6554e21e7573c0e94fb0db2e" 280 | }, 281 | "title": "NETGEAR Alert", 282 | "severity": "High", 283 | "logo": "https://cert.gov.sa/media/NETGEAR_dMW0amc.png", 284 | "alert_url": "https://cert.gov.sa/en/security-warnings/netgear-alert-2023-11-11/", 285 | "details": { 286 | "warning_date": "11 November, 2023", 287 | "severity_level": "● High", 288 | "warning_number": "2023-5889", 289 | "target_sector": "All", 290 | "p_1": "Warning Date", 291 | "p_2": "Severity Level", 292 | "p_3": "Warning Number", 293 | "p_4": "Target Sector", 294 | "p_5": "11 November, 2023", 295 | "p_6": "● High", 296 | "p_7": "2023-5889", 297 | "p_8": "All", 298 | "strong_9": "Description:", 299 | "p_10": "NETGEAR has released a security update to address several vulnerabilities in their products.", 300 | "strong_11": "Best practice and Recommendations:", 301 | "p_12": "The CERT team encourages users to review NETGEAR security advisory and apply the necessary updates:", 302 | "i_1": "https://kb.netgear.com/000065866/Security-Advisory-for-Multiple-Vulnerabilities-on-the-NMS300-PSV-2023-0114-PSV-2023-0115?article=000065866" 303 | } 304 | }, 305 | { 306 | "_id": { 307 | "$oid": "6554e21e7573c0e94fb0db2f" 308 | }, 309 | "title": "Atlassian Alert", 310 | "severity": "Critical", 311 | "logo": "https://cert.gov.sa/media/atlassian_63546K5.png", 312 | "alert_url": "https://cert.gov.sa/en/security-warnings/atlassian-alert-2023-11-10/", 313 | "details": { 314 | "warning_date": "10 November, 2023", 315 | "severity_level": "● Critical", 316 | "warning_number": "2023-5888", 317 | "target_sector": "All", 318 | "p_1": "Warning Date", 319 | "p_2": "Severity Level", 320 | "p_3": "Warning Number", 321 | "p_4": "Target Sector", 322 | "p_5": "10 November, 2023", 323 | "p_6": "● Critical", 324 | "p_7": "2023-5888", 325 | "p_8": "All", 326 | "strong_9": "Description:", 327 | "p_10": "Atlassian has released security updates to address a vulnerability in their products.", 328 | "strong_11": "Best practice and Recommendations:", 329 | "p_12": "The CERT team encourages users to review Atlassian security advisory and apply the necessary updates:", 330 | "i_1": "https://confluence.atlassian.com/security/cve-2023-46604-apache-activemq-rce-vulnerability-impacts-bamboo-data-center-and-server-1319242919.html?permissionViolation=true" 331 | } 332 | }, 333 | { 334 | "_id": { 335 | "$oid": "6554e21e7573c0e94fb0db30" 336 | }, 337 | "title": "Google Chrome Alert", 338 | "severity": "High", 339 | "logo": "https://cert.gov.sa/media/Chrome_BwTZEoM.png", 340 | "alert_url": "https://cert.gov.sa/en/security-warnings/google-chrome-alert119/", 341 | "details": { 342 | "warning_date": "9 November, 2023", 343 | "severity_level": "● High", 344 | "warning_number": "2023-5887", 345 | "target_sector": "All", 346 | "p_1": "Warning Date", 347 | "p_2": "Severity Level", 348 | "p_3": "Warning Number", 349 | "p_4": "Target Sector", 350 | "p_5": "9 November, 2023", 351 | "p_6": "● High", 352 | "p_7": "2023-5887", 353 | "p_8": "All", 354 | "link_9": "https://chromereleases.googleblog.com/2023/11/chrome-for-android-update.html", 355 | "p_10": "", 356 | "p_11": "Description:", 357 | "p_12": "Google has released a security update to address several vulnerabilities in Chrome browser for Android .", 358 | "p_13": "Best practice and Recommendations:", 359 | "p_14": "The CERT team encourages users to update the affected product, For more information, please follow the below link:", 360 | "i_1": "https://chromereleases.googleblog.com/2023/11/chrome-for-android-update.html" 361 | } 362 | }, 363 | { 364 | "_id": { 365 | "$oid": "6554e21e7573c0e94fb0db31" 366 | }, 367 | "title": "Google Chrome Alert", 368 | "severity": "High", 369 | "logo": "https://cert.gov.sa/media/Chrome_fNmvIxD.png", 370 | "alert_url": "https://cert.gov.sa/en/security-warnings/google-chrome-alert118/", 371 | "details": { 372 | "warning_date": "8 November, 2023", 373 | "severity_level": "● High", 374 | "warning_number": "2023-5886", 375 | "target_sector": "All", 376 | "p_1": "Warning Date", 377 | "p_2": "Severity Level", 378 | "p_3": "Warning Number", 379 | "p_4": "Target Sector", 380 | "p_5": "8 November, 2023", 381 | "p_6": "● High", 382 | "p_7": "2023-5886", 383 | "p_8": "All", 384 | "link_9": "https://chromereleases.googleblog.com/2023/11/stable-channel-update-for-desktop.html", 385 | "p_10": "", 386 | "p_11": "Description:", 387 | "p_12": "Google has released security updates to address several vulnerabilities in Chrome browser and ChromeOS.", 388 | "p_13": "Best practice and Recommendations:", 389 | "p_14": "The CERT team encourages users to update the affected products, For more information, please follow the below links:", 390 | "i_1": "https://chromereleases.googleblog.com/2023/11/stable-channel-update-for-desktop.html", 391 | "i_2": "https://chromereleases.googleblog.com/2023/11/long-term-support-channel-update-for.html" 392 | } 393 | }, 394 | { 395 | "_id": { 396 | "$oid": "6554e2577573c0e94fb0db34" 397 | }, 398 | "title": "Google Chrome Alert", 399 | "severity": "High", 400 | "logo": "https://cert.gov.sa/media/Chrome_oF8imzn.png", 401 | "alert_url": "https://cert.gov.sa/en/security-warnings/google-chrome-alert-2023-11-15/", 402 | "details": { 403 | "warning_date": "15 November, 2023", 404 | "severity_level": "● High", 405 | "warning_number": "2023-5901", 406 | "target_sector": "All", 407 | "p_1": "Warning Date", 408 | "p_2": "Severity Level", 409 | "p_3": "Warning Number", 410 | "p_4": "Target Sector", 411 | "p_5": "15 November, 2023", 412 | "p_6": "● High", 413 | "p_7": "2023-5901", 414 | "p_8": "All", 415 | "strong_9": "Description:", 416 | "p_10": "Google has released a security update to address several vulnerabilities in Chrome products.", 417 | "strong_11": "Best practice and Recommendations:", 418 | "p_12": "The CERT team encourages users to update the affected products, For more information, please follow the below links:", 419 | "i_1": "https://chromereleases.googleblog.com/2023/11/stable-channel-update-for-desktop_14.html", 420 | "i_2": "https://chromereleases.googleblog.com/2023/11/stable-channel-update-for.html" 421 | } 422 | }, 423 | { 424 | "_id": { 425 | "$oid": "6554e2587573c0e94fb0db35" 426 | }, 427 | "title": "Aruba Alert", 428 | "severity": "Critical", 429 | "logo": "https://cert.gov.sa/media/Aruba-Networks_DLgUEUm.png", 430 | "alert_url": "https://cert.gov.sa/en/security-warnings/aruba-alert-2023-11-15/", 431 | "details": { 432 | "warning_date": "15 November, 2023", 433 | "severity_level": "● Critical", 434 | "warning_number": "2023-5900", 435 | "target_sector": "All", 436 | "p_1": "Warning Date", 437 | "p_2": "Severity Level", 438 | "p_3": "Warning Number", 439 | "p_4": "Target Sector", 440 | "p_5": "15 November, 2023", 441 | "p_6": "● Critical", 442 | "p_7": "2023-5900", 443 | "p_8": "All", 444 | "strong_9": "Description:", 445 | "p_10": "Aruba has released security updates to address several vulnerabilities in their products.", 446 | "strong_11": "Best practice and Recommendations:", 447 | "p_12": "The CERT team encourages users to review Aruba security advisory and update the affected products:", 448 | "i_1": "https://www.arubanetworks.com/assets/alert/ARUBA-PSA-2023-017.txt" 449 | } 450 | }, 451 | { 452 | "_id": { 453 | "$oid": "6554e2587573c0e94fb0db36" 454 | }, 455 | "title": "VMware Alert", 456 | "severity": "Critical", 457 | "logo": "https://cert.gov.sa/media/Vmware_4TPABBJ.jpg", 458 | "alert_url": "https://cert.gov.sa/en/security-warnings/vmware-alert-2023-11-15/", 459 | "details": { 460 | "warning_date": "15 November, 2023", 461 | "severity_level": "● Critical", 462 | "warning_number": "2023-5899", 463 | "target_sector": "All", 464 | "p_1": "Warning Date", 465 | "p_2": "Severity Level", 466 | "p_3": "Warning Number", 467 | "p_4": "Target Sector", 468 | "p_5": "15 November, 2023", 469 | "p_6": "● Critical", 470 | "p_7": "2023-5899", 471 | "p_8": "All", 472 | "strong_9": "Description:", 473 | "p_10": "VMware has released a security update to address a critical vulnerability in its product.", 474 | "strong_11": "Best practice and Recommendations:", 475 | "p_12": "The CERT team encourages users to review VMware security advisory and update the affected product:", 476 | "i_1": "https://www.vmware.com/security/advisories/VMSA-2023-0026.html" 477 | } 478 | }, 479 | { 480 | "_id": { 481 | "$oid": "6554e2587573c0e94fb0db37" 482 | }, 483 | "title": "Adobe Alert", 484 | "severity": "Critical", 485 | "logo": "https://cert.gov.sa/media/Adobe_rG1RtZq.png", 486 | "alert_url": "https://cert.gov.sa/en/security-warnings/adobe-alert1114/", 487 | "details": { 488 | "warning_date": "14 November, 2023", 489 | "severity_level": "● Critical", 490 | "warning_number": "2023-5898", 491 | "target_sector": "All", 492 | "p_1": "Warning Date", 493 | "p_2": "Severity Level", 494 | "p_3": "Warning Number", 495 | "p_4": "Target Sector", 496 | "p_5": "14 November, 2023", 497 | "p_6": "● Critical", 498 | "p_7": "2023-5898", 499 | "p_8": "All", 500 | "link_9": "https://helpx.adobe.com/security/products/coldfusion/apsb23-52.html", 501 | "p_10": "", 502 | "p_11": "Description:", 503 | "p_12": "Adobe has released security updates to address several vulnerabilities in their products.", 504 | "p_13": "Best practice and Recommendations:", 505 | "p_14": "The CERT team encourages users to review Adobe security advisory and apply the necessary updates:", 506 | "i_1": "·https://helpx.adobe.com/security/products/coldfusion/apsb23-52.html", 507 | "i_2": "·https://helpx.adobe.com/security/products/robohelp-server/apsb23-53.html", 508 | "i_3": "·https://helpx.adobe.com/security/products/acrobat/apsb23-54.html", 509 | "i_4": "·https://helpx.adobe.com/security/products/photoshop/apsb23-56.html", 510 | "i_5": "·https://helpx.adobe.com/security/products/framemaker/apsb23-58.html", 511 | "i_6": "·https://helpx.adobe.com/security/products/incopy/apsb23-60.html", 512 | "i_7": "·https://helpx.adobe.com/security/products/media-encoder/apsb23-63.html", 513 | "i_8": "·https://helpx.adobe.com/security/products/audition/apsb23-64.html", 514 | "i_9": "·https://helpx.adobe.com/security/products/premiere_pro/apsb23-65.html", 515 | "i_10": "·https://helpx.adobe.com/security/products/after_effects/apsb23-66.html" 516 | } 517 | } 518 | ], 519 | "next_page": "https://1tozt5y6hl.execute-api.us-east-1.amazonaws.com/default/get_alerts?page=2&limit=10" 520 | } 521 | ``` 522 | 523 | ## Supported Arabic Language 524 | 525 | `https://1tozt5y6hl.execute-api.us-east-1.amazonaws.com/default/get_alerts?page=1&limit=10&lang=ar` 526 | 527 | ```json 528 | { 529 | "status": "success", 530 | "message": "Alerts retrieved successfully", 531 | "total_alerts": 2145, 532 | "alerts": [ 533 | { 534 | "_id": { 535 | "$oid": "6555366754572009bcd38905" 536 | }, 537 | "title": "تنبيه Adobe", 538 | "severity": "عالٍ جدًا", 539 | "logo": "https://cert.gov.sa/media/Adobe_rG1RtZq.png", 540 | "alert_url": "https://cert.gov.sa/ar/security-warnings/adobe-alert1114/", 541 | "details": { 542 | "warning_date": "14 نوفمبر, 2023", 543 | "severity_level": "● عالٍ جدًا", 544 | "warning_number": "2023-5898", 545 | "target_sector": "الكل", 546 | "p_1": "تاريخ التحذير", 547 | "p_2": "مستوى الخطورة", 548 | "p_3": "رقم التحذير", 549 | "p_4": "القطاع المستهدف", 550 | "p_5": "14 نوفمبر, 2023", 551 | "p_6": "● عالٍ جدًا", 552 | "p_7": "2023-5898", 553 | "p_8": "الكل", 554 | "link_9": "https://helpx.adobe.com/security/products/coldfusion/apsb23-52.html", 555 | "p_10": "", 556 | "p_11": "الوصف:", 557 | "p_12": "أصدرت Adobe عدّة تحديثات لمعالجة عدد من الثغرات في منتجاتها.", 558 | "p_13": "الاجراءات الوقائية:", 559 | "p_14": "يوصي المركز بتحديث النسخ المتأثرة حيث أصدرت Adobe توضيحًا لهذه التحديثات:", 560 | "i_1": "·https://helpx.adobe.com/security/products/coldfusion/apsb23-52.html", 561 | "i_2": "·https://helpx.adobe.com/security/products/robohelp-server/apsb23-53.html", 562 | "i_3": "·https://helpx.adobe.com/security/products/acrobat/apsb23-54.html", 563 | "i_4": "·https://helpx.adobe.com/security/products/photoshop/apsb23-56.html", 564 | "i_5": "·https://helpx.adobe.com/security/products/framemaker/apsb23-58.html", 565 | "i_6": "·https://helpx.adobe.com/security/products/incopy/apsb23-60.html", 566 | "i_7": "·https://helpx.adobe.com/security/products/media-encoder/apsb23-63.html", 567 | "i_8": "·https://helpx.adobe.com/security/products/audition/apsb23-64.html", 568 | "i_9": "·https://helpx.adobe.com/security/products/premiere_pro/apsb23-65.html", 569 | "i_10": "·https://helpx.adobe.com/security/products/after_effects/apsb23-66.html" 570 | } 571 | }, 572 | { 573 | "_id": { 574 | "$oid": "6555366754572009bcd38906" 575 | }, 576 | "title": "تنبيه Intel®", 577 | "severity": "عالٍ جدًا", 578 | "logo": "https://cert.gov.sa/media/intel_qZA4El6.png", 579 | "alert_url": "https://cert.gov.sa/ar/security-warnings/intel-alert1114/", 580 | "details": { 581 | "warning_date": "14 نوفمبر, 2023", 582 | "severity_level": "● عالٍ جدًا", 583 | "warning_number": "2023-5897", 584 | "target_sector": "الكل", 585 | "p_1": "تاريخ التحذير", 586 | "p_2": "مستوى الخطورة", 587 | "p_3": "رقم التحذير", 588 | "p_4": "القطاع المستهدف", 589 | "p_5": "14 نوفمبر, 2023", 590 | "p_6": "● عالٍ جدًا", 591 | "p_7": "2023-5897", 592 | "p_8": "الكل", 593 | "link_9": "https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00719.html", 594 | "p_10": "", 595 | "p_11": "الوصف:", 596 | "p_12": "أصدرت Intel® عدًة تحديثات لمعالجة عددٍ من الثغرات في منتجاتها.", 597 | "p_13": "الاجراءات الوقائية:", 598 | "p_14": "يوصي المركز بتحديث المنتجات المتأثرة، حيث أصدرت Intel® توضيحاً لهذه التحديثات عبر الروابط أدناه:", 599 | "i_1": "https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00719.html", 600 | "i_2": "https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00841.html", 601 | "i_3": "https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00861.html", 602 | "i_4": "https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00900.html", 603 | "i_5": "https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00902.html", 604 | "i_6": "https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00908.html", 605 | "i_7": "https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00944.html", 606 | "i_8": "https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00945.html", 607 | "i_9": "https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00950.html", 608 | "i_10": "https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00963.html", 609 | "i_11": "https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00968.html" 610 | } 611 | }, 612 | { 613 | "_id": { 614 | "$oid": "6555366754572009bcd38907" 615 | }, 616 | "title": "تنبيه Microsoft", 617 | "severity": "عالٍ جدًا", 618 | "logo": "https://cert.gov.sa/media/Microsoft_h3pg4gG.jpg", 619 | "alert_url": "https://cert.gov.sa/ar/security-warnings/microsoft-alert1114/", 620 | "details": { 621 | "warning_date": "14 نوفمبر, 2023", 622 | "severity_level": "● عالٍ جدًا", 623 | "warning_number": "2023-5896", 624 | "target_sector": "الكل", 625 | "p_1": "تاريخ التحذير", 626 | "p_2": "مستوى الخطورة", 627 | "p_3": "رقم التحذير", 628 | "p_4": "القطاع المستهدف", 629 | "p_5": "14 نوفمبر, 2023", 630 | "p_6": "● عالٍ جدًا", 631 | "p_7": "2023-5896", 632 | "p_8": "الكل", 633 | "link_9": "https://msrc.microsoft.com/update-guide/releaseNote/2023-Nov", 634 | "p_10": "", 635 | "p_11": "لوصف:", 636 | "p_12": "أصدرت Microsoft عدّة تحديثات لمعالجة عددٍ من الثغرات في منتجاتها.", 637 | "p_13": "الاجراءات الوقائية:", 638 | "p_14": "يوصي المركز بتحديث المنتجات المتأثرة، حيث أصدرت Microsoft توضيحًا لهذه التحديثات:", 639 | "i_1": "https://msrc.microsoft.com/update-guide/releaseNote/2023-Nov" 640 | } 641 | }, 642 | { 643 | "_id": { 644 | "$oid": "6555366754572009bcd38908" 645 | }, 646 | "title": "تنبيه SAP", 647 | "severity": "عالٍ جدًا", 648 | "logo": "https://cert.gov.sa/media/SAP_bUJsLvQ.png", 649 | "alert_url": "https://cert.gov.sa/ar/security-warnings/sap-alert1114/", 650 | "details": { 651 | "warning_date": "14 نوفمبر, 2023", 652 | "severity_level": "● عالٍ جدًا", 653 | "warning_number": "2023-5895", 654 | "target_sector": "الكل", 655 | "p_1": "تاريخ التحذير", 656 | "p_2": "مستوى الخطورة", 657 | "p_3": "رقم التحذير", 658 | "p_4": "القطاع المستهدف", 659 | "p_5": "14 نوفمبر, 2023", 660 | "p_6": "● عالٍ جدًا", 661 | "p_7": "2023-5895", 662 | "p_8": "الكل", 663 | "link_9": "https://sap.com/documents/2022/02/fa865ea4-167e-0010-bca6-c68f7e60039b.html/", 664 | "p_10": "", 665 | "p_11": "الوصف:", 666 | "p_12": "أصدرت SAP عدّة تحديثات لمعالجة عددٍ من الثغرات في منتجاتها.", 667 | "p_13": "الاجراءات الوقائية:", 668 | "p_14": "يوصي المركز بتحديث المنتجات المتأثرة، حيث أصدرت SAP توضيحًا لهذه التحديثات:", 669 | "i_1": "https://sap.com/documents/2022/02/fa865ea4-167e-0010-bca6-c68f7e60039b.html/" 670 | } 671 | }, 672 | { 673 | "_id": { 674 | "$oid": "6555366754572009bcd38909" 675 | }, 676 | "title": "تنبيه Zoom", 677 | "severity": "عالي", 678 | "logo": "https://cert.gov.sa/media/zoom_mBjqsUe.png", 679 | "alert_url": "https://cert.gov.sa/ar/security-warnings/zoom-alert1114/", 680 | "details": { 681 | "warning_date": "14 نوفمبر, 2023", 682 | "severity_level": "● عالي", 683 | "warning_number": "2023-5894", 684 | "target_sector": "الكل", 685 | "p_1": "تاريخ التحذير", 686 | "p_2": "مستوى الخطورة", 687 | "p_3": "رقم التحذير", 688 | "p_4": "القطاع المستهدف", 689 | "p_5": "14 نوفمبر, 2023", 690 | "p_6": "● عالي", 691 | "p_7": "2023-5894", 692 | "p_8": "الكل", 693 | "link_9": "https://explore.zoom.us/en/trust/security/security-bulletin/", 694 | "p_10": "", 695 | "p_11": "الوصف:", 696 | "p_12": "أصدرت Zoom عدّة تحديثات لمعالجة عددٍ من الثغرات في منتجاتها.", 697 | "p_13": "الاجراءات الوقائية:", 698 | "p_14": "يوصي المركز بتحديث المنتجات المتأثرة، حيث أصدرت Zoom توضيحًا لهذه التحديثات:", 699 | "i_1": "https://explore.zoom.us/en/trust/security/security-bulletin/" 700 | } 701 | }, 702 | { 703 | "_id": { 704 | "$oid": "6555366854572009bcd3890a" 705 | }, 706 | "title": "Foxitتنبيه", 707 | "severity": "عالي", 708 | "logo": "https://cert.gov.sa/media/FOX_IT_Tk8lS6n.png", 709 | "alert_url": "https://cert.gov.sa/ar/security-warnings/alert-foxit/", 710 | "details": { 711 | "warning_date": "14 نوفمبر, 2023", 712 | "severity_level": "● عالي", 713 | "warning_number": "2023-5893", 714 | "target_sector": "الكل", 715 | "p_1": "تاريخ التحذير", 716 | "p_2": "مستوى الخطورة", 717 | "p_3": "رقم التحذير", 718 | "p_4": "القطاع المستهدف", 719 | "p_5": "14 نوفمبر, 2023", 720 | "p_6": "● عالي", 721 | "p_7": "2023-5893", 722 | "p_8": "الكل", 723 | "p_9": "أصدرت Foxit تحديثاً لمعالجة عدّة ثغرات في منتجاتها.الاجراءات الوقائية:يوصي المركز بتحديث المنتجات المتأثرة، حيث أصدرت Foxit توضيحًا لهذه التحديثات:https://www.foxit.com/support/security-bulletins.html", 724 | "p_10": "", 725 | "p_11": "أصدرت Foxit تحديثاً لمعالجة عدّة ثغرات في منتجاتها.", 726 | "p_12": "الاجراءات الوقائية:", 727 | "p_13": "يوصي المركز بتحديث المنتجات المتأثرة، حيث أصدرت Foxit توضيحًا لهذه التحديثات:", 728 | "i_1": "https://www.foxit.com/support/security-bulletins.html" 729 | } 730 | }, 731 | { 732 | "_id": { 733 | "$oid": "6555366854572009bcd3890b" 734 | }, 735 | "title": "Schneider Electric ...", 736 | "severity": "عالي", 737 | "logo": "https://cert.gov.sa/media/Schneider_Electric_3b8xZU4.jpg", 738 | "alert_url": "https://cert.gov.sa/ar/security-warnings/11-14-2023/", 739 | "details": { 740 | "warning_date": "14 نوفمبر, 2023", 741 | "severity_level": "● عالي", 742 | "warning_number": "2023-5892", 743 | "target_sector": "الكل", 744 | "p_1": "تاريخ التحذير", 745 | "p_2": "مستوى الخطورة", 746 | "p_3": "رقم التحذير", 747 | "p_4": "القطاع المستهدف", 748 | "p_5": "14 نوفمبر, 2023", 749 | "p_6": "● عالي", 750 | "p_7": "2023-5892", 751 | "p_8": "الكل", 752 | "p_9": "أصدرت Schneider Electric عدة تحديثات لمعالجة عدد من الثغرات في منتجاتها.الاجراءات الوقائية:يوصي المركز بتحديث النسخ المتأثرة حيث أصدرت Schneider Electric توضيحًا لهذه التحديثات:https://download.schneider-electric.com/files?p_Doc_Ref=SEVD-2023-318-02&p_enDocType=Security+and+Safety+Notice&p_File_Name=SEVD-2023-318-02.pdfhttps://download.schneider-electric.com/files?p_Doc_Ref=SEVD-2023-318-01&p_enDocType=Security+and+Safety+Notice&p_File_Name=SEVD-2023-318-01.pdf", 753 | "p_10": "", 754 | "p_11": "", 755 | "p_12": "أصدرت Schneider Electric عدة تحديثات لمعالجة عدد من الثغرات في منتجاتها.", 756 | "p_13": "الاجراءات الوقائية:", 757 | "p_14": "يوصي المركز بتحديث النسخ المتأثرة حيث أصدرت Schneider Electric توضيحًا لهذه التحديثات:", 758 | "i_1": "https://download.schneider-electric.com/files?p_Doc_Ref=SEVD-2023-318-02&p_enDocType=Security+and+Safety+Notice&p_File_Name=SEVD-2023-318-02.pdf", 759 | "i_2": "https://download.schneider-electric.com/files?p_Doc_Ref=SEVD-2023-318-01&p_enDocType=Security+and+Safety+Notice&p_File_Name=SEVD-2023-318-01.pdf" 760 | } 761 | }, 762 | { 763 | "_id": { 764 | "$oid": "6555366854572009bcd3890c" 765 | }, 766 | "title": "النشرة الأسبوعية لل...", 767 | "severity": "عالٍ جدًا", 768 | "logo": "https://cert.gov.sa/media/non_XcxHHds.jpg", 769 | "alert_url": "https://cert.gov.sa/ar/security-warnings/weekly-vulnerabilities-summary-29-october-4-november/", 770 | "details": { 771 | "warning_date": "12 نوفمبر, 2023", 772 | "severity_level": "● عالٍ جدًا", 773 | "warning_number": "2023-5891", 774 | "target_sector": "الكل", 775 | "p_1": "تاريخ التحذير", 776 | "p_2": "مستوى الخطورة", 777 | "p_3": "رقم التحذير", 778 | "p_4": "القطاع المستهدف", 779 | "p_5": "12 نوفمبر, 2023", 780 | "p_6": "● عالٍ جدًا", 781 | "p_7": "2023-5891", 782 | "p_8": "الكل", 783 | "link_9": "/documents/137/Weekly_Vulnerabilities_Summary_29_October_4_November.pdf", 784 | "p_10": "الوصف:", 785 | "p_11": "نشارككم النشرة الأسبوعية للثغرات المسجلة من قبل the National Institute of Standards and Technology (NIST) National Vulnerability Database (NVD) للأسبوع من 29 اكتوبر إلى 4 نوفمبر، ويتم تصنيف هذه الثغرات باستخدام معيار Common Vulnerability Scoring System (CVSS) حيث يتم تصنيف الثغرات بناء على التالي:", 786 | "i_1": "عالي جدًا: النتيجة الأساسية لـ CVSS 9.0-10.0", 787 | "i_2": "عالي: النتيجة الأساسية لـ CVSS 7.0-8.9", 788 | "i_3": "متوسط: النتيجة الأساسية لـ CVSS 4.0-6.9", 789 | "i_4": "منخفض: النتيجة الأساسية لـ CVSS 0.0-3.9", 790 | "link_12": "/documents/137/Weekly_Vulnerabilities_Summary_29_October_4_November.pdf", 791 | "p_13": "تقدم تفاصيل الثغرات كما تم نشرها من قبل NIST’s NVD. وإذ تبقى مسؤولية الجهة أو الشخص قائمة للتأكد من تطبيق التوصيات المناسبة." 792 | } 793 | }, 794 | { 795 | "_id": { 796 | "$oid": "6555366854572009bcd3890d" 797 | }, 798 | "title": "تنبيه Foxit", 799 | "severity": "عالي", 800 | "logo": "https://cert.gov.sa/media/FOX_IT_cAD4gnL.png", 801 | "alert_url": "https://cert.gov.sa/ar/security-warnings/foxit-alert1111/", 802 | "details": { 803 | "warning_date": "11 نوفمبر, 2023", 804 | "severity_level": "● عالي", 805 | "warning_number": "2023-5890", 806 | "target_sector": "الكل", 807 | "p_1": "تاريخ التحذير", 808 | "p_2": "مستوى الخطورة", 809 | "p_3": "رقم التحذير", 810 | "p_4": "القطاع المستهدف", 811 | "p_5": "11 نوفمبر, 2023", 812 | "p_6": "● عالي", 813 | "p_7": "2023-5890", 814 | "p_8": "الكل", 815 | "link_9": "https://www.foxit.com/support/security-bulletins.html", 816 | "p_10": "", 817 | "p_11": "الوصف:", 818 | "p_12": "أصدرت Foxit تحديثاً لمعالجة ثغرة في منتجاتها.", 819 | "p_13": "الاجراءات الوقائية:", 820 | "p_14": "يوصي المركز بتحديث المنتجات المتأثرة، حيث أصدرت Foxit توضيحًا لهذا التحديث:", 821 | "i_1": "https://www.foxit.com/support/security-bulletins.html" 822 | } 823 | }, 824 | { 825 | "_id": { 826 | "$oid": "655536ce54572009bcd38910" 827 | }, 828 | "title": "Google Chrome تنبيه", 829 | "severity": "عالي", 830 | "logo": "https://cert.gov.sa/media/Chrome_oF8imzn.png", 831 | "alert_url": "https://cert.gov.sa/ar/security-warnings/google-chrome-alert-2023-11-15/", 832 | "details": { 833 | "warning_date": "15 نوفمبر, 2023", 834 | "severity_level": "● عالي", 835 | "warning_number": "2023-5901", 836 | "target_sector": "الكل", 837 | "p_1": "تاريخ التحذير", 838 | "p_2": "مستوى الخطورة", 839 | "p_3": "رقم التحذير", 840 | "p_4": "القطاع المستهدف", 841 | "p_5": "15 نوفمبر, 2023", 842 | "p_6": "● عالي", 843 | "p_7": "2023-5901", 844 | "p_8": "الكل", 845 | "strong_9": "الوصف:", 846 | "p_10": "أصدرت Google تحديثاً لمعالجة عددٍ من الثغرات في منتجات Chrome.", 847 | "strong_11": "الاجراءات الوقائية:", 848 | "p_12": "يوصي المركز بتحديث المنتجات المتأثرة، حيث أصدرت Google توضيحًا لهذه التحديثات عبر الروابط أدناه:", 849 | "i_1": "https://chromereleases.googleblog.com/2023/11/stable-channel-update-for-desktop_14.html", 850 | "i_2": "https://chromereleases.googleblog.com/2023/11/stable-channel-update-for.html" 851 | } 852 | } 853 | ], 854 | "next_page": "https://1tozt5y6hl.execute-api.us-east-1.amazonaws.com/default/get_alerts?page=2&limit=10&lang=ar" 855 | } 856 | ``` 857 | 858 | ## License 📄 859 | Licensed under the MIT License. 860 | 861 | ## Contact Me 862 | 863 | Feel free to open a PR & contact me, using linkedin or my email anqorithm@gmail.com -------------------------------------------------------------------------------- /assets/crawle_alerts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anqorithm/Saudi-CERT-API/c0046d73f02c90d5f6f068082b1fdc14e20f57d7/assets/crawle_alerts.png -------------------------------------------------------------------------------- /assets/get_alert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anqorithm/Saudi-CERT-API/c0046d73f02c90d5f6f068082b1fdc14e20f57d7/assets/get_alert.png -------------------------------------------------------------------------------- /assets/get_alerts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anqorithm/Saudi-CERT-API/c0046d73f02c90d5f6f068082b1fdc14e20f57d7/assets/get_alerts.png -------------------------------------------------------------------------------- /assets/postman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anqorithm/Saudi-CERT-API/c0046d73f02c90d5f6f068082b1fdc14e20f57d7/assets/postman.png -------------------------------------------------------------------------------- /assets/saudiCERTBackground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anqorithm/Saudi-CERT-API/c0046d73f02c90d5f6f068082b1fdc14e20f57d7/assets/saudiCERTBackground.png -------------------------------------------------------------------------------- /assets/systemDiagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anqorithm/Saudi-CERT-API/c0046d73f02c90d5f6f068082b1fdc14e20f57d7/assets/systemDiagram1.png -------------------------------------------------------------------------------- /functions/alerts/get_alert.py: -------------------------------------------------------------------------------- 1 | import os 2 | import json 3 | from pymongo import MongoClient, errors 4 | from bson import json_util, ObjectId 5 | 6 | 7 | def lambda_handler(event, context): 8 | try: 9 | query_params = event.get('queryStringParameters', {}) 10 | lang = query_params.get('lang', 'en') 11 | 12 | if 'id' in query_params: 13 | alert_id = query_params['id'] 14 | try: 15 | object_id = ObjectId(alert_id) 16 | alert = get_alert_by_id(object_id, lang) 17 | except errors.InvalidId: 18 | return { 19 | 'statusCode': 400, 20 | 'headers': {'Content-Type': 'application/json'}, 21 | 'body': json.dumps({'error': 'Invalid alert ID format'}) 22 | } 23 | else: 24 | alert = get_alert_by_query(query_params, lang) 25 | 26 | if alert: 27 | return { 28 | 'statusCode': 200, 29 | 'headers': {'Content-Type': 'application/json'}, 30 | 'body': json.dumps({'alert': alert}, default=json_util.default) 31 | } 32 | else: 33 | return { 34 | 'statusCode': 404, 35 | 'headers': {'Content-Type': 'application/json'}, 36 | 'body': json.dumps({'error': 'Alert not found'}) 37 | } 38 | except KeyError: 39 | return { 40 | 'statusCode': 400, 41 | 'headers': {'Content-Type': 'application/json'}, 42 | 'body': json.dumps({'error': 'Missing search parameters'}) 43 | } 44 | except Exception as e: 45 | return { 46 | 'statusCode': 500, 47 | 'headers': {'Content-Type': 'application/json'}, 48 | 'body': json.dumps({'error': str(e)}) 49 | } 50 | 51 | 52 | def get_alert_by_id(alert_id, lang): 53 | try: 54 | mongodb_uri = os.getenv('MONGO_URI') 55 | client = MongoClient(mongodb_uri, serverSelectionTimeoutMS=5000) 56 | db = client['alerts_database'] 57 | collection = db['alerts_ar'] if lang == 'ar' else db['alerts'] 58 | 59 | return collection.find_one({'_id': alert_id}) 60 | except Exception as e: 61 | raise Exception(f"Failed to retrieve alert by ID: {str(e)}") 62 | 63 | 64 | def get_alert_by_query(query_params, lang): 65 | try: 66 | mongodb_uri = os.getenv('MONGO_URI') 67 | client = MongoClient(mongodb_uri, serverSelectionTimeoutMS=5000) 68 | db = client['alerts_database'] 69 | collection = db['alerts_ar'] if lang == 'ar' else db['alerts'] 70 | query = {k: v for k, v in query_params.items() if v} 71 | 72 | return list(collection.find(query)) 73 | except Exception as e: 74 | raise Exception(f"Failed to retrieve alerts by query: {str(e)}") 75 | -------------------------------------------------------------------------------- /functions/alerts/get_alerts.py: -------------------------------------------------------------------------------- 1 | import os 2 | import json 3 | from pymongo import MongoClient 4 | from bson import json_util 5 | from urllib.parse import urlencode 6 | 7 | 8 | def lambda_handler(event, context): 9 | page = 1 10 | limit = 10 11 | lang = 'en' 12 | 13 | query_params = event.get('queryStringParameters', {}) 14 | if query_params: 15 | page = int(query_params.get('page', 1)) 16 | limit = int(query_params.get('limit', 10)) 17 | lang = query_params.get('lang', 'en') 18 | 19 | if page < 1 or limit < 1: 20 | return { 21 | 'statusCode': 400, 22 | 'headers': {'Content-Type': 'application/json'}, 23 | 'body': json.dumps({'status': 'error', 'message': 'Page and limit must be positive integers'}) 24 | } 25 | 26 | try: 27 | alerts, total_alerts = get_alerts( 28 | page, limit, lang) 29 | next_page_url = None 30 | 31 | total_pages = (total_alerts + limit - 1) // limit 32 | 33 | if page < total_pages: 34 | next_page_params = urlencode( 35 | {'page': page + 1, 'limit': limit, 'lang': lang}) 36 | next_page_url = "https://1tozt5y6hl.execute-api.us-east-1.amazonaws.com/default/get_alerts?" + next_page_params 37 | 38 | return { 39 | 'statusCode': 200, 40 | 'headers': {'Content-Type': 'application/json'}, 41 | 'body': json.dumps({ 42 | 'status': 'success', 43 | 'message': 'Alerts retrieved successfully', 44 | 'total_alerts': total_alerts, 45 | 'alerts': alerts, 46 | 'next_page': next_page_url 47 | }, default=json_util.default) 48 | } 49 | except Exception as e: 50 | return { 51 | 'statusCode': 500, 52 | 'headers': {'Content-Type': 'application/json'}, 53 | 'body': json.dumps({'status': 'error', 'message': str(e)}) 54 | } 55 | 56 | 57 | def get_alerts(page, limit, lang): 58 | try: 59 | mongodb_uri = os.getenv('MONGO_URI') 60 | client = MongoClient(mongodb_uri, serverSelectionTimeoutMS=5000) 61 | client.server_info() 62 | 63 | db = client['alerts_database'] 64 | collection_name = 'alerts_ar' if lang == 'ar' else 'alerts' 65 | collection = db[collection_name] 66 | 67 | skip = (page - 1) * limit 68 | 69 | total_alerts = collection.count_documents({}) 70 | 71 | alerts = list(collection.find({}).skip(skip).limit(limit)) 72 | return alerts, total_alerts 73 | except Exception as e: 74 | raise Exception(f"Database connection failed: {str(e)}") 75 | -------------------------------------------------------------------------------- /functions/crewler/crawle_alerts_ar.py: -------------------------------------------------------------------------------- 1 | import os 2 | import json 3 | import requests 4 | from pymongo import MongoClient 5 | from bs4 import BeautifulSoup 6 | 7 | 8 | def lambda_handler(event, context): 9 | try: 10 | from_page = int(event.get("from_page", 1)) 11 | to_page = int(event.get("to_page", 1)) + 1 12 | 13 | all_alerts = [] 14 | for i in range(from_page, to_page): 15 | data = scrape_page(i) 16 | all_alerts.extend(data) 17 | store_in_mongodb(all_alerts) 18 | return { 19 | 'statusCode': 200, 20 | 'body': json.dumps(f'Successfully processed pages {from_page} to {to_page - 1}') 21 | } 22 | except Exception as e: 23 | return { 24 | 'statusCode': 500, 25 | 'body': json.dumps(f'Error: {str(e)}') 26 | } 27 | 28 | 29 | def store_in_mongodb(data): 30 | mongodb_uri = os.getenv('MONGO_URI') 31 | client = MongoClient(mongodb_uri) 32 | db = client['alerts_database'] 33 | collection = db['alerts_ar'] 34 | 35 | for alert in data: 36 | warning_number = alert['details'].get('warning_number') 37 | if not collection.find_one({'details.warning_number': warning_number}): 38 | collection.insert_one(alert) 39 | else: 40 | print( 41 | f"Alert with warning number {warning_number} already exists, skipping.") 42 | 43 | 44 | def scrape_alert_details(alert_url): 45 | response = requests.get(alert_url) 46 | if response.status_code == 200: 47 | soup = BeautifulSoup(response.content, 'html.parser') 48 | alert_details_div = soup.find( 49 | 'div', class_='cert-body cert-gray-70 m-3') 50 | 51 | details = {} 52 | 53 | if alert_details_div: 54 | columns = alert_details_div.find('div', class_='row pb-5') 55 | if columns: 56 | left_col = columns.find( 57 | 'div', class_='col-5 col-md-auto cert-gray-50').find_all('p') 58 | right_col = columns.find( 59 | 'div', class_='col-7 col-md-9 vertical-line pl-4').find_all('p') 60 | 61 | keys = ["warning_date", "severity_level", 62 | "warning_number", "target_sector"] 63 | for key, value in zip(keys, right_col): 64 | details[key] = value.get_text(strip=True) 65 | 66 | paragraph_count = 1 67 | list_item_count = 1 68 | for child in alert_details_div.find_all(['p', 'li', 'strong']): 69 | if child.name == 'p' and child.find('a'): 70 | link_text = child.get_text( 71 | strip=True).split('click')[0].strip() 72 | details[f"link_{paragraph_count}"] = child.find( 73 | 'a').get('href', '') 74 | paragraph_count += 1 75 | elif child.name == 'li': 76 | details[f"i_{list_item_count}"] = child.get_text( 77 | strip=True) 78 | list_item_count += 1 79 | elif child.name == 'p': 80 | details[f"p_{paragraph_count}"] = child.get_text( 81 | strip=True) 82 | paragraph_count += 1 83 | elif child.name == 'strong': 84 | strong_text = child.get_text(strip=True) 85 | if strong_text: 86 | details[f"strong_{paragraph_count}"] = strong_text 87 | paragraph_count += 1 88 | 89 | return details 90 | else: 91 | return f"Failed to retrieve alert details. Status code: {response.status_code}" 92 | 93 | 94 | def scrape_page(page_number): 95 | url = f"https://cert.gov.sa/ar/security-warnings/?page={page_number}" 96 | response = requests.get(url) 97 | 98 | if response.status_code == 200: 99 | soup = BeautifulSoup(response.content, 'html.parser') 100 | 101 | alerts_severity = soup.find_all('div', class_='card-header') 102 | alerts_title = soup.find_all('p', class_='cert-card-body-warning') 103 | alert_images = soup.find_all( 104 | 'img', class_=['card-img-top', 'security-alerts-cover-image']) 105 | alert_cards = soup.find_all( 106 | 'div', class_='card mb-4 light-gray-border') 107 | alerts_data = [] 108 | 109 | for severity, title, image, card in zip(alerts_severity, alerts_title, alert_images, alert_cards): 110 | alert_url = "https://cert.gov.sa" + card.find('a').get('href') 111 | alert_details = scrape_alert_details(alert_url) 112 | 113 | alert_info = { 114 | "title": title.text.strip(), 115 | "severity": severity.text.strip(), 116 | "logo": "https://cert.gov.sa" + image.get('src'), 117 | "alert_url": alert_url, 118 | "details": alert_details 119 | } 120 | alerts_data.append(alert_info) 121 | 122 | return alerts_data 123 | else: 124 | return f"Failed to retrieve data from page {page_number}. Status code: {response.status_code}" 125 | -------------------------------------------------------------------------------- /functions/crewler/crawle_alerts_en.py: -------------------------------------------------------------------------------- 1 | import os 2 | import json 3 | import requests 4 | from pymongo import MongoClient 5 | from bs4 import BeautifulSoup 6 | 7 | 8 | def lambda_handler(event, context): 9 | try: 10 | from_page = int(event.get("from_page", 1)) 11 | to_page = int(event.get("to_page", 1)) + 1 12 | 13 | all_alerts = [] 14 | for i in range(from_page, to_page): 15 | data = scrape_page(i) 16 | all_alerts.extend(data) 17 | store_in_mongodb(all_alerts) 18 | return { 19 | 'statusCode': 200, 20 | 'body': json.dumps(f'Successfully processed pages {from_page} to {to_page - 1}') 21 | } 22 | except Exception as e: 23 | return { 24 | 'statusCode': 500, 25 | 'body': json.dumps(f'Error: {str(e)}') 26 | } 27 | 28 | 29 | def store_in_mongodb(data): 30 | mongodb_uri = os.getenv('MONGO_URI') 31 | client = MongoClient(mongodb_uri) 32 | db = client['alerts_database'] 33 | collection = db['alerts'] 34 | 35 | for alert in data: 36 | warning_number = alert['details'].get('warning_number') 37 | if not collection.find_one({'details.warning_number': warning_number}): 38 | collection.insert_one(alert) 39 | else: 40 | print( 41 | f"Alert with warning number {warning_number} already exists, skipping.") 42 | 43 | 44 | def scrape_alert_details(alert_url): 45 | response = requests.get(alert_url) 46 | if response.status_code == 200: 47 | soup = BeautifulSoup(response.content, 'html.parser') 48 | alert_details_div = soup.find( 49 | 'div', class_='cert-body cert-gray-70 m-3') 50 | 51 | details = {} 52 | 53 | if alert_details_div: 54 | columns = alert_details_div.find('div', class_='row pb-5') 55 | if columns: 56 | left_col = columns.find( 57 | 'div', class_='col-5 col-md-auto cert-gray-50').find_all('p') 58 | right_col = columns.find( 59 | 'div', class_='col-7 col-md-9 vertical-line pl-4').find_all('p') 60 | 61 | keys = ["warning_date", "severity_level", 62 | "warning_number", "target_sector"] 63 | for key, value in zip(keys, right_col): 64 | details[key] = value.get_text(strip=True) 65 | 66 | paragraph_count = 1 67 | list_item_count = 1 68 | for child in alert_details_div.find_all(['p', 'li', 'strong']): 69 | if child.name == 'p' and child.find('a'): 70 | link_text = child.get_text( 71 | strip=True).split('click')[0].strip() 72 | details[f"link_{paragraph_count}"] = child.find( 73 | 'a').get('href', '') 74 | paragraph_count += 1 75 | elif child.name == 'li': 76 | details[f"i_{list_item_count}"] = child.get_text( 77 | strip=True) 78 | list_item_count += 1 79 | elif child.name == 'p': 80 | details[f"p_{paragraph_count}"] = child.get_text( 81 | strip=True) 82 | paragraph_count += 1 83 | elif child.name == 'strong': 84 | strong_text = child.get_text(strip=True) 85 | if strong_text: 86 | details[f"strong_{paragraph_count}"] = strong_text 87 | paragraph_count += 1 88 | 89 | return details 90 | else: 91 | return f"Failed to retrieve alert details. Status code: {response.status_code}" 92 | 93 | 94 | def scrape_page(page_number): 95 | url = f"https://cert.gov.sa/en/security-warnings/?page={page_number}" 96 | response = requests.get(url) 97 | 98 | if response.status_code == 200: 99 | soup = BeautifulSoup(response.content, 'html.parser') 100 | 101 | alerts_severity = soup.find_all('div', class_='card-header') 102 | alerts_title = soup.find_all('p', class_='cert-card-body-warning') 103 | alert_images = soup.find_all( 104 | 'img', class_=['card-img-top', 'security-alerts-cover-image']) 105 | alert_cards = soup.find_all( 106 | 'div', class_='card mb-4 light-gray-border') 107 | alerts_data = [] 108 | 109 | for severity, title, image, card in zip(alerts_severity, alerts_title, alert_images, alert_cards): 110 | alert_url = "https://cert.gov.sa" + card.find('a').get('href') 111 | alert_details = scrape_alert_details(alert_url) 112 | 113 | alert_info = { 114 | "title": title.text.strip(), 115 | "severity": severity.text.strip(), 116 | "logo": "https://cert.gov.sa" + image.get('src'), 117 | "alert_url": alert_url, 118 | "details": alert_details 119 | } 120 | alerts_data.append(alert_info) 121 | 122 | return alerts_data 123 | else: 124 | return f"Failed to retrieve data from page {page_number}. Status code: {response.status_code}" 125 | -------------------------------------------------------------------------------- /http.http: -------------------------------------------------------------------------------- 1 | ### 2 | # Get Alerts - Fetch multiple alerts with optional query parameters 3 | # Basic usage without query parameters 4 | GET https://1tozt5y6hl.execute-api.us-east-1.amazonaws.com/default/get_alerts 5 | 6 | # Usage with query parameters 7 | GET https://1tozt5y6hl.execute-api.us-east-1.amazonaws.com/default/get_alerts?page=1&limit=5 8 | 9 | # Fetching alerts based on specific attributes like title or severity 10 | GET https://1tozt5y6hl.execute-api.us-east-1.amazonaws.com/default/get_alerts?title=Weekly%20Vulnerability&severity=Critical 11 | 12 | ### 13 | # Get Alert - Fetch a single alert by its ID 14 | # Replace with the actual ID of the alert 15 | GET https://sas5g5ymqb.execute-api.us-east-1.amazonaws.com/default/get_alert?alert_id= 16 | 17 | # Example with a placeholder ID 18 | GET https://sas5g5ymqb.execute-api.us-east-1.amazonaws.com/default/get_alert?alert_id=5f50c31e8eabf80018e4b255 19 | --------------------------------------------------------------------------------