
مجموعة من قواعد Semgrep للتحليل الساكن للكود، وكشف الثغرات الأمنية، وفرض ممارسات البرمجة الآمنة عبر لغات متعددة.
يحتوي هذا المستودع على قواعد Semgrep التي طوّرتها Trail of Bits وأتاحتها للعموم. وهي جزء من جهودنا التطويرية المستمرة وتُستخدم في عمليات تدقيق الأمن لدينا، وأبحاث الثغرات، ومشاريعنا الداخلية. وستتطوّر بمرور الوقت كلما حدّدنا تقنيات جديدة.
زار Testing Handbook للحصول على إرشادات Semgrep.
أسهل طريقة لتشغيل القواعد هي تشغيلها من سجل Semgrep. وللقيام بذلك، انتقل إلى المجلد الجذر لمشروعك وشغّل ما يلي:```shell $ semgrep --config "p/trailofbits"
بدلاً من ذلك، يمكنك استنساخ هذا المستودع، والانتقال إلى المجلد الجذر لمشروعك، وتشغيل القواعد الفردية باستخدام الأمر أدناه:```shell
$ semgrep --config /path/to/semgrep-rules/semgreprule.yml
لتشغيل جميع القواعد من المستودع المستنسخ:```shell $ semgrep --config /path/to/semgrep-rules/ .
## Useful flags
سيقوم Semgrep بالفحص على جميع ملفات التعليمات البرمجية المدعومة باستثناء الملفات الموجودة في ملف `.gitignore` الخاص بك. إذا كنت تريد تشغيل القواعد على جميع الملفات والدلائل، بما في ذلك تلك الموجودة في ملف `.gitignore`، أضف العلم `--no-git-ignore`.```shell
$ semgrep --config /path/to/semgrep-rules/ . --no-git-ignore
يمكنك أيضًا إخبار Semgrep بتجاهل الملفات والمجلدات التي تطابق أي نمط. على سبيل المثال، إذا أردت إخبار Semgrep بتجاهل جميع ملفات اختبار Go، يمكنك تشغيل ما يلي:```shell $ semgrep --config /path/to/semgrep-rules/ . --exclude='*_test.go'
استخدم `-o` لإخراج النتائج إلى ملف:```shell
$ semgrep --config /path/to/semgrep-rules/hanging-goroutine.yml -o leaks.txt'
| ID | التجربة | التأثير | الثقة | الوصف |
|---|---|---|---|---|
| eth-rpc-tracetransaction | 🛝🔗 | 🟥 | 🌕 | يكتشف محاولات استخراج معلومات التتبع من معاملة أو كتلة EVM. في تطبيقات التبادل أو الجسور، يجب تنفيذ منطق إضافي لتغليف هذه النقاط الطرفية لمنع احتساب القيم المنقولة أثناء إطارات الاستدعاء المتراجعة. |
| eth-txreceipt-status | 🛝🔗 | 🟥 | 🌕 | يكتشف عند قراءة حالة إيصال المعاملة |
| hanging-goroutine | 🛝🔗 | 🟩 | 🌗 | تسريبات Goroutine |
| invalid-usage-of-modified-variable | 🛝🔗 | 🟧 | 🌘 | تعيين غير مقصود محتمل عند حدوث خطأ |
| iterate-over-empty-map | 🛝🔗 | 🟩 | 🌗 | من المحتمل تكرار غير ضروري على خريطة فارغة |
| missing-runlock-on-rwmutex | 🛝🔗 |
| ID | التجربة | التأثير | الثقة | الوصف |
|---|---|---|---|---|
| automatic-memory-pinning | 🛝🔗 | 🟩 | 🌘 | ذاكرة PyTorch غير مثبتة تلقائيًا |
| lxml-in-pandas | 🛝🔗 | 🟧 | 🌘 | هجمات XXE محتملة من تحميل lxml في pandas |
| msgpack-numpy | 🛝🔗 | 🟥 | 🌗 | تنفيذ تعسفي محتمل للكود من دوال تعتمد على التسلسل (pickling) |
| numpy-distutils | 🛝🔗 | 🟩 | 🌘 | استخدام numpy.distutils المهجور |
| numpy-f2py-compile | 🛝🔗 | 🟥 | 🌗 | تنفيذ تعسفي محتمل للكود من ترجمة f2py في NumPy |
| numpy-in-pytorch-datasets | 🛝🔗 |
| ID | التجربة | التأثير | الثقة | الوصف |
|---|---|---|---|---|
| panic-in-function-returning-result | 🛝🔗 | 🟩 | 🌘 | استدعاء unwrap أو expect في دالة تُرجع Result |
| ID | التجربة | التأثير | الثقة | الوصف |
|---|---|---|---|---|
| schema-directives | 🛝🔗 | 🟥 | 🌗 | استخدام خيار ApolloServer المتقادم 'schemaDirectives' |
| use-of-graphql-upload | 🛝🔗 | 🟧 | 🌕 | استخدام مكتبة graphql-upload |
| v3-potentially-bad-cors | 🛝🔗 | 🟧 | 🌕 | سياسة CORS سيئة محتملة |
| v3-express-bad-cors | 🛝🔗 | 🟥 | 🌗 | سياسة CORS سيئة |
| v3-express-no-cors | 🛝🔗 | 🟩 | 🌘 | غياب سياسة CORS |
| v3-bad-cors | 🛝🔗 | 🟥 | 🌗 |
| ID | التجربة | التأثير | الثقة | الوصف |
|---|---|---|---|---|
| gc-call | 🛝🔗 | 🟩 | 🌘 | |
| mongo-hostname-verification-disabled | 🛝🔗 | 🟥 | 🌘 |
| -- | :--------: | :----: | :--------: | ----------- | | apt-key-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | apt-key-validate-certs-disabled | 🛝🔗 | 🟥 | 🌘 | | | apt-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | dnf-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | dnf-validate-certs-disabled | 🛝🔗 | 🟥 | 🌘 | | | get-url-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | get-url-validate-certs-disabled | 🛝🔗 | 🟥 | 🌘 | | | rpm-key-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | rpm-key-validate-certs-disabled | 🛝🔗 | 🟥 | 🌘 | | | unarchive-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | unarchive-validate-certs-disabled | 🛝🔗 | 🟥 | 🌘 | | | wrm-cert-validation-ignore | 🛝🔗 | 🟥 | 🌘 | | | yum-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | yum-validate-certs-disabled | 🛝🔗 | 🟥 | 🌘 | | | zypper-repository-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | zypper-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | port-all-interfaces | 🛝🔗 | 🟩 | 🌕 | | | aws-secret-key | 🛝🔗 | 🟧 | 🌘 | | | azure-principal-secret | 🛝🔗 | 🟧 | 🌘 | | | gcp-credentials-json | 🛝🔗 | 🟧 | 🌘 | | | jfrog-hardcoded-credential | 🛝🔗 | 🟧 | 🌘 | | | pypi-publish-password | 🛝🔗 | 🟧 | 🌘 | | | rubygems-publish-key | 🛝🔗 | 🟧 | 🌘 | | | vault-token | 🛝🔗 | 🟧 | 🌘 | |
| المعرف | Playground | التأثير | الثقة | الوصف |
|---|---|---|---|---|
| amqp-unencrypted-transport | 🛝🔗 | 🟥 | 🌘 | |
| container-privileged | 🛝🔗 | 🟥 | 🌗 | |
| container-user-root | 🛝🔗 | 🟥 | 🌗 | |
| curl-insecure | 🛝🔗 | 🟥 | 🌗 | |
| curl-unencrypted-url | 🛝🔗 | 🟥 | 🌗 | |
| gpg-insecure-flags | 🛝🔗 | 🟥 | 🌗 | |
| installer-allow-untrusted | 🛝🔗 |
| المعرف | Playground | التأثير | الثقة | الوصف |
|---|---|---|---|---|
| insecure-url-host-hassuffix-check | 🛝🔗 | 🌫️ | 🌘 |
نرحب بطلبات السحب والقضايا!
انظر CONTRIBUTING.md لمزيد من المعلومات.
القواعد المعرّفة في هذا المستودع مرخّصة بموجب AGPLv3.
أمثلة الملفات الجانبية قد تكون مشتقة من أعمال أخرى، وتحتفظ برخصها الأصلية عند الاقتضاء.
| 🟧 |
| 🌗 |
غياب RUnlock على قفل RWMutex قبل العودة من دالة |
| missing-unlock-before-return | 🛝🔗 | 🟧 | 🌗 | غياب فتح mutex قبل العودة من دالة |
| nil-check-after-call | 🛝🔗 | 🟧 | 🌗 | إلغاء مرجعية nil محتمل |
| racy-append-to-slice | 🛝🔗 | 🟧 | 🌗 | استدعاءات متزامنة إلى append من عدة غوروتينات |
| racy-write-to-map | 🛝🔗 | 🟧 | 🌗 | كتابات متزامنة إلى نفس الخريطة في عدة غوروتينات |
| servercodec-readrequestbody-unhandled-nil | 🛝🔗 | 🟩 | 🌘 | تنفيذ غير صحيح محتمل لواجهة ServerCodec |
| string-to-int-signedness-cast | 🛝🔗 | 🟧 | 🌘 | تجاوز سفلي في الأعداد الصحيحة |
| sync-mutex-value-copied | 🛝🔗 | 🟩 | 🌘 | نسخ sync.Mutex عبر مستقبلات القيمة |
| unmarshal-tag-is-dash | 🛝🔗 | 🟧 | 🌘 |
| unmarshal-tag-is-omitempty | 🛝🔗 | 🟩 | 🌘 |
| unsafe-dll-loading | 🛝🔗 | 🟥 | 🌘 | استخدام دالة عرضة لهجمات اختطاف DLL |
| waitgroup-add-called-inside-goroutine | 🛝🔗 | 🟧 | 🌗 | استدعاءات sync.WaitGroup.Add داخل غوروتينات مجهولة |
| waitgroup-wait-inside-loop | 🛝🔗 | 🟧 | 🌗 | استدعاءات sync.WaitGroup.Wait داخل حلقة |
| 🟩 |
| 🌘 |
استدعاءات لمولد الأرقام العشوائية (RNG) في NumPy داخل مجموعة بيانات Torch |
| numpy-in-pytorch-modules | 🛝🔗 | 🌫️ | 🌗 | استخدامات لدوال NumPy داخل وحدات PyTorch |
| numpy-load-library | 🛝🔗 | 🟥 | 🌗 | تنفيذ تعسفي محتمل للكود من تحميل مكتبة NumPy |
| onnx-session-options | 🛝🔗 | 🟥 | 🌗 | تنفيذ تعسفي محتمل للكود من تحميل مكتبة ONNX |
| pandas-eval | 🛝🔗 | 🟥 | 🌕 | تنفيذ تعسفي محتمل للكود من دوال pandas التي تقيِّم تعبيرات مقدمة من المستخدم |
| pickles-in-keras-deprecation | 🛝🔗 | 🟥 | 🌗 | تنفيذ تعسفي محتمل للكود من دالة load_model في Keras |
| pickles-in-keras | 🛝🔗 | 🟥 | 🌗 | تنفيذ تعسفي محتمل للكود من دالة load_model في Keras |
| pickles-in-numpy | 🛝🔗 | 🟥 | 🌗 | تنفيذ تعسفي محتمل للكود من دوال NumPy المعتمدة على التسلسل (pickling) |
| pickles-in-pandas | 🛝🔗 | 🟥 | 🌗 | تنفيذ تعسفي محتمل للكود من دوال Pandas المعتمدة على التسلسل (pickling) |
| pickles-in-pytorch-distributed | 🛝🔗 | 🟥 | 🌗 | تنفيذ تعسفي محتمل للكود من دوال PyTorch.Distributed المعتمدة على التسلسل (pickling) |
| pickles-in-pytorch | 🛝🔗 | 🟥 | 🌗 | تنفيذ تعسفي محتمل للكود من دوال PyTorch المعتمدة على التسلسل (pickling) |
| pickles-in-tensorflow | 🛝🔗 | 🟥 | 🌗 | تنفيذ تعسفي محتمل للكود من دالة التحميل في tensorflow |
| pytorch-classes-load-library | 🛝🔗 | 🟥 | 🌗 | تنفيذ تعسفي محتمل للكود من تحميل مكتبة PyTorch |
| pytorch-package | 🛝🔗 | 🟥 | 🌕 | تنفيذ تعسفي محتمل للكود من torch.package |
| pytorch-tensor | 🛝🔗 | 🌫️ | 🌘 | مشاكل تحليل محتملة وعدم كفاءة ناتجة عن إنشاء موتر غير صحيح |
| scikit-joblib-load | 🛝🔗 | 🟥 | 🌗 | تنفيذ تعسفي محتمل للكود من دوال SciKit.Joblib المعتمدة على التسلسل (pickling) |
| tarfile-extractall-traversal | 🛝🔗 | 🟧 | 🌗 | عبور مسار محتمل في استدعاء extractall لملف tarfile |
| tensorflow-load-library | 🛝🔗 | 🟥 | 🌗 | تنفيذ تعسفي محتمل للكود من تحميل مكتبة TensorFlow |
| waiting-with-pytorch-distributed | 🛝🔗 | 🟩 | 🌗 | سلوك غير محدد محتمل في PyTorch عند عدم انتظار الطلبات |
| سياسة CORS سيئة |
| v3-no-cors | 🛝🔗 | 🟩 | 🌘 | غياب سياسة CORS |
| v3-csrf-prevention | 🛝🔗 | 🟧 | 🌘 | غياب الحماية من CSRF |
| v4-csrf-prevention | 🛝🔗 | 🟧 | 🌘 | تعطيل الحماية من CSRF |
| 🛝🔗 |
| 🟩 |
| 🌘 |
| json-create-deserialization | 🛝🔗 | 🟥 | 🌕 |
| rails-cache-store-marshal | 🛝🔗 | 🟩 | 🌗 |
| rails-cookie-attributes | 🛝🔗 | 🟩 | 🌘 |
| rails-params-json | 🛝🔗 | 🟥 | 🌕 |
| rest-client-disable-verification | 🛝🔗 | 🟥 | 🌘 |
| ruby-saml-skip-validation | 🛝🔗 | 🟧 | 🌘 |
| yaml-unsafe-load | 🛝🔗 | 🟥 | 🌘 |
| 🛝🔗 |
| 🟥 |
| 🌘 |
| vault-hardcoded-token | 🛝🔗 | 🟥 | 🌘 |
| vault-skip-tls-verify | 🛝🔗 | 🟥 | 🌘 |
| 🟥 |
| 🌘 |
| mongodb-insecure-transport | 🛝🔗 | 🟥 | 🌘 |
| mysql-insecure-sslmode | 🛝🔗 | 🟥 | 🌗 |
| node-disable-certificate-validation | 🛝🔗 | 🟥 | 🌘 |
| openssl-insecure-flags | 🛝🔗 | 🟥 | 🌗 |
| postgres-insecure-sslmode | 🛝🔗 | 🟥 | 🌘 |
| redis-unencrypted-transport | 🛝🔗 | 🟥 | 🌘 |
| ssh-disable-host-key-checking | 🛝🔗 | 🟥 | 🌗 |
| tar-insecure-flags | 🛝🔗 | 🟥 | 🌗 |
| wget-no-check-certificate | 🛝🔗 | 🟥 | 🌗 |
| wget-unencrypted-url | 🛝🔗 | 🟥 | 🌗 |