Skip to content

Commit

Permalink
First release
Browse files Browse the repository at this point in the history
  • Loading branch information
pierreavn committed Dec 26, 2024
0 parents commit 9932650
Show file tree
Hide file tree
Showing 153 changed files with 5,259 additions and 0 deletions.
67 changes: 67 additions & 0 deletions .github/ISSUE_TEMPLATE/bug-report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
name: Bug Report
description: Report an issue in Verdex
labels: ["bug"]
body:
- type: checkboxes
attributes:
label: Before reporting an issue
description: |
Please search to see if the issue is already reported, and try to reproduce the issue on the latest release.
Any reported issues must be reproducible in the [latest release](https://github.com/verdexlab/verdex/releases) of Verdex.
options:
- label: I have read and understood the above terms for submitting issues.
required: true
- type: dropdown
id: area
attributes:
label: Area
description: Affected area
options:
- Templates
- CLI and core
- Documentation
- Other
validations:
required: true
- type: textarea
id: description
attributes:
label: Describe the bug
description: Provide a clear and concise description of what the problem is.
validations:
required: true
- type: input
id: version
attributes:
label: Version
description: What version of Verdex CLI are you running?
validations:
required: true
- type: textarea
id: behaviorExpected
attributes:
label: Expected behavior
description: Describe the expected behavior clearly and concisely.
validations:
required: true
- type: textarea
id: behaviorActual
attributes:
label: Actual behavior
description: Describe the actual behavior clearly and concisely.
validations:
required: true
- type: textarea
id: reproducer
attributes:
label: How to Reproduce?
description: Provide clear and concise steps to reproduce the problem.
validations:
required: true
- type: textarea
id: other
attributes:
label: Anything else?
description: Links? References? Anything that will give us more context about the issue you are encountering!
validations:
required: false
25 changes: 25 additions & 0 deletions .github/ISSUE_TEMPLATE/feature-request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Feature Request
description: Request an enhancement or a new feature to be added to Verdex
labels: ["enhancement"]
body:
- type: textarea
id: description
attributes:
label: Description
description: Describe the feature or enhancement at a high-level.
validations:
required: true
- type: textarea
id: motivation
attributes:
label: Motivation
description: Describe why the feature should be added.
validations:
required: false
- type: textarea
id: details
attributes:
label: Details
description: Design ideas? Implementation ideas? Anything that will give us more context about the feature you are proposing!
validations:
required: false
32 changes: 32 additions & 0 deletions .github/ISSUE_TEMPLATE/suggest-product.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Product Suggestion
description: Suggest a new product to add to be added to Verdex
labels: ["product-suggestion"]
body:
- type: input
id: name
attributes:
label: Product Name
description: What is the name of the product?
validations:
required: true
- type: input
id: description
attributes:
label: Product Description
description: A small description of the product, in one sentence.
validations:
required: true
- type: input
id: icon
attributes:
label: Product Icon
description: An icon code from https://fontawesome.com/icons
validations:
required: true
- type: textarea
id: motivation
attributes:
label: Motivation
description: Describe why this product should be added to Verdex.
validations:
required: true
21 changes: 21 additions & 0 deletions .github/workflows/build-release-binary.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: Build and Release binary

on:
schedule:
- cron: "30 1 * * *"

jobs:
build-release-binary:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Build Verdex binary
run: |
go mod download
go build -ldflags "-X github.com/verdexlab/verdex/verdex/core.releaseEnvironment=release-binary" -o verdex-binary
- name: Store Verdex binary
run: |
# TODO
19 changes: 19 additions & 0 deletions .github/workflows/build-release-docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: Build and Release Docker

on:
schedule:
- cron: "30 1 * * *"

jobs:
build-release-docker:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Build Docker image
run: docker build -t verdexlab/verdex .

- name: Push Docker image
run: |
# TODO
29 changes: 29 additions & 0 deletions .github/workflows/update-products-votes.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Update Products Votes

on:
schedule:
- cron: "30 1 * * *"

jobs:
update-products-votes:
runs-on: ubuntu-latest

permissions:
contents: write

steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: 3.8

- name: Update Products Votes
run: python3 scripts/update-products-votes.py

- name: Git Commit & Push
run: |
git config user.name github-actions
git config user.email [email protected]
git add .
git commit -m "[auto] Updated products votes on documentation"
git push
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
.DS_Store

targets.txt
output.json

# Templates Caches
.versions.cache
.cache
29 changes: 29 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Contributing to Verdex
We appreciate your interest in contributing to verdex!
This document provides some basic guidelines for contributors.

## Getting Started
- Always base your work from the `develop` branch, which is the development branch with the latest code.
- Before creating a Pull Request (PR), make sure there is a corresponding issue for your contribution. If there isn't one already, please create one.
- Include the problem description in the issue.
- Run test cases on all product versions before submitting the Pull Request (PR):
```bash
# all versions:
go run . -test -product keycloak

# single version:
go run . -test -product keycloak -test-version 26.0.5

# with real target:
go run . -target https://target.fr -product keycloak
```

## Code Style
Please adhere to the existing coding style for consistency.

## Questions
If you have any questions or need further guidance, please feel free to ask in the issue or PR, or reach out to the maintainers.
Thank you for your contribution!

## Documentation
Use [Mintlify local development guide](https://mintlify.com/docs/development) to improve documentation in `/docs`.
15 changes: 15 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Build
FROM golang:1.21-alpine AS build
RUN apk add build-base
WORKDIR /pkg
COPY . /pkg
RUN go mod download
RUN go build -ldflags "-X github.com/verdexlab/verdex/verdex/core.releaseEnvironment=release-docker" -o verdex-binary

# Binary
FROM alpine:3.20.3
RUN apk upgrade --no-cache \
&& apk add --no-cache bind-tools ca-certificates
COPY --from=build /pkg/verdex-binary /usr/local/bin/verdex

ENTRYPOINT ["verdex"]
9 changes: 9 additions & 0 deletions LICENSE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
MIT License

Copyright (c) 2024 Verdex

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
43 changes: 43 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
![Verdex screenshot](./docs/images/screenshot.png)

**Verdex** is a fast, collaborative, and open-source tool designed to
**detect online service versions through feature-based analysis**,
even when traditional versioning information is unavailable.

🔧 Instead of relying on exposed headers, Verdex quickly analyzes the features present on a service.
For example, **if a feature was introduced in a specific version, Verdex uses this information to deduce the
minimum version of the service** (see [How It Works](/how-it-works) for more information).

🪶 Verdex relies solely on **non-aggressive methods**, in particular by using mostly static assets (javascript, css and html files).

🎯 Currently, Verdex supports detecting versions of **Keycloak** and **NextCloud** (see [Products](/essentials/products) documentation).

## 📖 Documentation
The entire tool documentation is available at:
[https://verdex-docs.mintlify.app](https://verdex-docs.mintlify.app)

## 🚀 Install Verdex

Using Go:
```bash
go install -v github.com/verdexlab/verdex@latest
```

or using Docker:
```bash
echo 'alias verdex="docker run --rm verdexlab/verdex:latest"' >> ~/.bashrc
source ~/.bashrc
```

> 📖 Read documentation for more installation options: [https://verdex-docs.mintlify.app](https://verdex-docs.mintlify.app)
## 🌪️ Run version detection

```bash
verdex -target https://keycloak.example.com -output-json ./results.json
```

> 📖 Read documentation for more detection options: [https://verdex-docs.mintlify.app](https://verdex-docs.mintlify.app)
## License
Verdex is distributed under MIT License.
44 changes: 44 additions & 0 deletions docs/contribute/introduction.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
---
title: 'Introduction'
description: 'How to contribute to Verdex by improving detections or reporting issues.'
icon: 'lightbulb'
iconType: 'duotone'
---

<Note>
We appreciate your interest in contributing to Verdex,
please feel free to "bring your rock to the building" 🪨,
give feedback/suggestions or reach out by e-mail at `verdexlab[at]proton.me`
</Note>

## Official Repository

Verdex is open-source and the entire code can be found on the official GitHub repository:

[https://github.com/verdexlab/verdex](https://github.com/verdexlab/verdex)

Please read the [CONTRIBUTING.md](https://github.com/verdexlab/verdex/blob/dev/CONTRIBUTING.md) before new Pull Requests (PR).

## Structure

The project structure breaks down as follows:

* `docs/` : project documentation

* `templates/` : products, templates and rules

* `<product>/` : each supported product has its own directory

* `<product>.yml` : product definition

* `rules/` : detection rules for product, see [Rules section](/contribute/rules)

* `variables/` : detection variables for product, see [Variables section](/contribute/variables)

* `tests/` : test cases for product, see [Tests section](/contribute/tests)

* `verdex/` : the core detection engine

<Note>
To contribute new detected versions or products, everything is in the `templates/` directory.
</Note>
41 changes: 41 additions & 0 deletions docs/contribute/rules.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
title: 'Rules'
description: 'How to create version detection rules in Verdex'
icon: 'list-check'
iconType: 'duotone'
---

Rules are the core of Verdex detection.

## Definition

Rules are auto-discovered in `templates/<product>/rules/` directories and are using `.yml` extension.

The syntax is deliberately close to that of the [Nuclei templates](https://github.com/projectdiscovery/nuclei), to simplify the development of new rules.

The default structure of a rule is the following:

```yaml
# General information
info:
product: keycloak # Associated product
author: pierreavn # Variable author

# Matching versions
# available syntax: https://github.com/Masterminds/semver
version: '>= 25.0.1'

# Checks
http:
- method: GET # HTTP method
path: '/info' # Path on target

match-condition: and
matchers:
- type: word # Resolve method ('status', 'word' or 'regex')
part: body # Part where to extract value ('body' only)
word: '{"key": "newTranslationKey"'

- type: status
status: 200
```
Loading

0 comments on commit 9932650

Please sign in to comment.