
Репозиторий для хранения markdown-шаблонов для исследователей
Примечания по структуре каталога:
Скрипт generate-directories.py берёт текущую последнюю версию структуры VRT из GitHub и создаёт недостающие каталоги. Он не удаляет и не переименовывает каталоги на основе элементов, удалённых из VRT.
Скрипт следует стандартным именам записей и сохраняет подчёркивания / регистр символов в том виде, в котором они указаны в поле id VRT.
В этом репозитории включён режим «Protected Master», что означает, что только администраторы проекта могут коммитить в ветку master через Pull Requests. Все обновления должны поступать через pull request для обеспечения целостности.
Нижеприведённое описание предполагает, что SSH-доступ настроен правильно.
Сначала переключитесь на ветку master:
git clone [email protected]:bugcrowd/templates.git ## n.b. using SSH aliases can make this much simpler
Когда ветка master будет у вас в системе, вам нужно будет создать ветку для предстоящей работы:
git checkout -b <branch-name>
Примерами имён веток могут быть XXE-templates XSS-templates — что-то, что обозначает, над какой частью работы вы трудитесь. Такие ветки должны быть небольшими, желательно содержать группу шаблонов и не более того. Делайте коммиты и пуши часто!
git commit -am "Comments about what you changed go here" сохраняет ваши изменения в локальном git-репозитории. Всегда оставляйте описательное сообщение коммита.
Когда вы завершили работу над шаблонами, вы можете запушить их в репозиторий. Они по-прежнему будут находиться в собственной ветке, но при пуше запустится линтер и проверит markdown на соответствие набору правил. Если вы следовали примеру шаблона и не сильно отклонялись от него, шаблоны должны пройти проверку.
git push --set-upstream origin <branch-name> — эта команда создаст ветку на сервере origin (github) и отправит ваши изменения. Это нужно сделать для ветки только один раз; последующие пуши ветки можно выполнять с помощью git push.
После успешного запуска линтера вы можете создать Pull Request (PR).
Выберите нужную ветку в интерфейсе GitHub. Над кодом вы должны увидеть кнопку «Pull request».
Нажмите эту кнопку, затем заполните сведения об изменениях для проверки администраторами проекта и нажмите «Create pull request».
На этом всё! Мы проверим PR и объединим или отклоним его по усмотрению.
После принятия PR вы можете удалить ветку.
git branch -d <branch-name>
Ниже приведён пример шаблона. Все разделы должны быть обновлены и содержать корректную информацию.
## Overview of the Vulnerability
Provide a 1-2 sentence description of the vulnerability.
This format is a good guide:
[VULNTYPE] in [COMPONENT] in [APPLICATION] allows [ATTACKER] to [IMPACT] via [VECTOR]
## Business Impact
Provide an example of the impact to the business. This could be reputational damage, financial loss, a loss in customer trust, etc.
## Steps to Reproduce
Provide a step-by-step walkthrough on how to access the vulnerable injection point, and how to exploit the vulnerability.
Example:
1. Login to in-scope asset at <www.bugcrowd.com/login>
1. Browse to account page
1. Modify ID token to add single quote
1. View error which states 'SQL Syntax Error'
1. Replace ID value with `1' waitfor delay '00:00:10'; `
## Proof of Concept (PoC)
Your submission must include evidence of the vulnerability and not be theoretical in nature.
You may present your evidence as output from a tool, such as SQLMap, unless the program forbids the use of these tools. Evidence may also be in the format of terminal output, screenshots, or video.
Use this section to demonstrate clearly the effect of the vulnerability. However, do not access Personally Identifiable Information (PII).
Это пример шаблона:
# Reflected Cross-Site Scripting (Non-self)
## Overview of the Vulnerability
Reflected Cross-Site Scripting (XSS) is a type of injection attack where malicious JavaScript code is injected into a website. When a user visits the affected web page, the JavaScript code executes and its input is reflected in the user’s browser. Reflected XSS can be found on this domain which allows an attacker to create a crafted URL. When opened by a user, this URL will execute arbitrary Javascript within that user’s browser in the context of this domain.
When an attacker can control code that is executed within a user’s browser, they are able to carry out any actions that the user is able to perform, including accessing any of the user's data and modifying information within the user’s permissions. This can result in modification, deletion, or theft of data, including accessing or deleting files, or stealing session cookies which an attacker could use to hijack a user’s session.
## Business Impact
Reflected XSS could lead to data theft through the attacker’s ability to manipulate data through their access to the application, and their ability to interact with other users, including performing other malicious attacks, which would appear to originate from a legitimate user. These malicious actions could also result in reputational damage for the business through the impact to customers’ trust.
## Steps to Reproduce
1. Enable a HTTP interception proxy, such as Burp Suite or OWASP ZAP
1. Use a browser to navigate to: {{URL}}
1. Forward the following request to the endpoint:
```HTTP Request
{{request}}
```
1. Observe the JavaScript payload being executed
## Proof of Concept (PoC)
Below is a screenshot demonstrating the injected JavaScript executing at the vulnerable endpoint:
{{screenshot}}
Где возможно, используйте страдательный залог. Например:
Правильно:
В веб-приложении была обнаружена уязвимость SQL-инъекции.
Неправильно:
Я обнаружил уязвимость SQL-инъекции в веб-приложении.
Неправильно:
Компания Bugcrowd обнаружила уязвимость SQL-инъекции в веб-приложении.
Неправильно:
Мы обнаружили SQL-инъекцию в веб-приложении.
Неправильно:
В ходе тестирования в веб-приложении (<www.example.com>) была обнаружена SQL-инъекция критической степени серьёзности, которая могла быть использована злоумышленником для выгрузки персональных данных из внутренней базы данных.
Правильно:
В <www.example.com> была обнаружена SQL-инъекция, позволяющая злоумышленнику выгружать персональные данные.
Неправильно:
В <www.example.com> была обнаружена SQL-инъекция, позволяющая злоумышленнику выгружать персональные данные, включая адреса электронной почты, что считалось бы нарушением GDPR и представляет значительный бизнес-риск.
Правильно:
В <www.example.com> была обнаружена SQL-инъекция, позволяющая злоумышленнику выгружать персональные данные. Извлекаемые данные включают пароли, адреса электронной почты и полные имена. Это является нарушением GDPR и представляет значительный бизнес-риск.
При использовании аббревиатуры всегда сначала расшифровывайте её полностью, указывая аббревиатуру в скобках. После того как аббревиатура расшифрована, в последующих упоминаниях можно использовать только её.
Например:
Межсайтовый скриптинг (XSS) — это атака на стороне клиента, которая позволяет злоумышленнику выполнять JavaScript в браузере жертвы. XSS возникает, когда пользовательский ввод возвращается в браузер без кодирования.
Межсайтовая подделка запроса (CSRF) была обнаружена на example.com. Эта CSRF-уязвимость позволяет обновить адрес пользователя-жертвы без его ведома.
Правильно: Bugcrowd Неправильно: BugCrowd, bugcrowd, Bug Crowd, Bug crowd и bug crowd.
Правильно: pentest (или Pentest, если того требует грамматика) Неправильно: pen test, PenTest, Pen Test
«An» следует использовать, когда следующее слово начинается с согласного звука. В противном случае следует использовать «A».
Правильно:
Неправильно:
Используемый язык всегда должен быть безэмоциональным и беспристрастным.
Примеры:
{{target}}: Название цели, входящей в область действия, указанное на странице программы (например, *.bugcrowd.com){{application}}: Конкретное приложение в пределах цели (например, Acme Inc. Employee Portal){{type}}: Тип проводимого тестирования, указанный рядом с целью на странице программы (например, тестирование веб-сайта, API, мобильных приложений, оборудования и т. д.){{url}}: Заполнитель для URL (например, https://bugcrowd.com/vulnerability-rating-taxonomy){{version}}: Конкретный номер версии протестированного программного обеспечения (например, 13.3.7){{program}}: Название программы (например, Bugcrowd){{screenshot}}: Фото- или видеодоказательство, демонстрирующее выполнение proof of concept.{{action}}: Действие, которое злоумышленник может выполнить при эксплуатации уязвимости (например, выгрузить токены сессии, получить полный контроль над учётной записью администратора, выгрузить PII и т. д.){{parameter}}: Переменная, которая передаёт данные от клиента к серверу и может содержать различные типы данных. Обработка определяется серверным кодом. (например, id=1337){{hardware}}: Конкретное аппаратное устройство, используемое для эксплуатации IoT- или автомобильного актива.{{software}}: Конкретное программное обеспечение, используемое для эксплуатации актива (например, burp, nessus, nikto и т. д.){{payload}}: Команда или полезная нагрузка (payload), выполняемая на активе.{{value}}: Конкретное метрическое значение (секунды, миллисекунды, частоты и т. д.)В этом репозитории есть гем bugcrowd_templates. Этот гем используется для получения templates (шаблонов) для описания отчётов и заметок по методологиям на основе выбранных элементов VRT. Он используется и поддерживается командой Bugcrowd Engineering.
Добавьте эту строку в Gemfile вашего приложения:
gem 'bugcrowd_templates'
Для удобства разработки мы предоставляем утилиту для запуска песочницы для работы с гемом. Вы можете вызвать её с помощью:
bin/console
Ниже приведён пример вызова BugcrowdTemplates для получения templates в полях описания отчёта и заметок по методологиям.
BugcrowdTemplates.get(
type: 'any_value', # type can be submissions or methodologies
field: 'any_value', # field name of the type
category: 'any_value', # any category name from VRT option
subcategory: 'any_value', # any subcategory name from VRT option
item: 'any_value', # any item name from VRT option
file_name: 'any_value' # file_name can be 'template' or 'guidance'
)
Ниже приведён пример вызова BugcrowdTemplates для получения template в поле описания отчёта.
BugcrowdTemplates.get(
type: 'submissions',
field: 'description', # field name of the submissions
category: 'server_security_misconfiguration', # category name from VRT option
subcategory: 'clickjacking', # subcategory name from VRT option
item: 'non_sensitive_action', # item name from VRT option
file_name: 'template' # template
)
=> '# Clickjacking on a non-sensitive action\n\n## Overview\n\n' # template fetched from templates path
Пример получения шаблона guidance
BugcrowdTemplates.get(
type: 'submissions',
field: 'description',
category: 'using_components_with_known_vulnerabilities',
subcategory: 'outdated_software_version',
file_name: 'guidance'
)
Ниже приведён пример вызова BugcrowdTemplates для получения templates в поле заметок методологий.
BugcrowdTemplates.get(
type: 'methodology',
field: 'notes', # field name of the methodologies
category: 'website_testing',
file_name: 'information'
)
=> '# Information gathering and Reconnaisance\n\n##' # template fetched from templates path