diff --git a/.github/workflows/4_build_and_push_images.yml b/.github/workflows/4_build_and_push_images.yml index a801e928..e60a00f7 100644 --- a/.github/workflows/4_build_and_push_images.yml +++ b/.github/workflows/4_build_and_push_images.yml @@ -6,7 +6,7 @@ on: inputs: image_tag: description: 'Docker image tag' - default: '4.14.7' + default: '4.14.8' required: true docker_reference: description: 'wazuh-docker reference' @@ -38,7 +38,7 @@ on: inputs: image_tag: description: 'Docker image tag' - default: '4.14.7' + default: '4.14.8' required: true type: string docker_reference: diff --git a/.github/workflows/4_bumper_repository.yml b/.github/workflows/4_bumper_repository.yml index 1fd26c7d..d7e9bafb 100644 --- a/.github/workflows/4_bumper_repository.yml +++ b/.github/workflows/4_bumper_repository.yml @@ -110,13 +110,21 @@ jobs: bash ${{ env.BUMP_SCRIPT_PATH }} ${{ steps.vars.outputs.script_params }} - name: Commit and push changes + id: bump_commit run: | git add . - git commit -m "feat: bump ${{ github.ref_name }}" - git push origin ${{ steps.vars.outputs.branch_name }} + if git diff --staged --quiet; then + echo "Nothing to bump: the repository is already at the requested version/stage. Skipping commit." + echo "has_changes=false" >> $GITHUB_OUTPUT + else + git commit -m "feat: bump ${{ github.ref_name }}" + git push origin ${{ steps.vars.outputs.branch_name }} + echo "has_changes=true" >> $GITHUB_OUTPUT + fi - name: Create pull request id: create_pr + if: steps.bump_commit.outputs.has_changes == 'true' run: | gh auth setup-git PR_URL=$(gh pr create \ @@ -129,14 +137,19 @@ jobs: echo "pull_request_url=${PR_URL}" >> $GITHUB_OUTPUT - name: Merge pull request + if: steps.bump_commit.outputs.has_changes == 'true' run: | # Any checks for the PR are bypassed since the branch is expected to be functional (i.e. the bump process does not introduce any bugs) gh pr merge "${{ steps.create_pr.outputs.pull_request_url }}" --merge --admin - name: Show logs run: | - echo "Bump complete." - echo "Branch: ${{ steps.vars.outputs.branch_name }}" - echo "PR: ${{ steps.create_pr.outputs.pull_request_url }}" + if [[ "${{ steps.bump_commit.outputs.has_changes }}" == "true" ]]; then + echo "Bump complete." + echo "Branch: ${{ steps.vars.outputs.branch_name }}" + echo "PR: ${{ steps.create_pr.outputs.pull_request_url }}" + else + echo "Bump skipped: the repository is already at the requested version/stage." + fi echo "Bumper scripts logs:" cat ${BUMP_LOG_PATH}/repository_bumper*log \ No newline at end of file diff --git a/.github/workflows/5_bumper_repository.yml b/.github/workflows/5_bumper_repository.yml index 281b4775..43241783 100644 --- a/.github/workflows/5_bumper_repository.yml +++ b/.github/workflows/5_bumper_repository.yml @@ -144,10 +144,17 @@ jobs: bash ${{ env.BUMP_SCRIPT_PATH }} ${{ steps.vars.outputs.script_params }} - name: Commit changes (Bump) + id: bump_commit if: inputs.revert != true run: | git add . - git commit -m "feat: bump ${{ github.ref_name }}" + if git diff --staged --quiet; then + echo "Nothing to bump: the repository is already at the requested version/stage. Skipping commit." + echo "has_changes=false" >> $GITHUB_OUTPUT + else + git commit -m "feat: bump ${{ github.ref_name }}" + echo "has_changes=true" >> $GITHUB_OUTPUT + fi - name: Fetch full history (Revert) if: inputs.revert == true @@ -198,13 +205,13 @@ jobs: fi - name: Push changes - if: inputs.revert != true || (inputs.revert == true && steps.revert_step.outputs.has_changes == 'true') + if: (inputs.revert != true && steps.bump_commit.outputs.has_changes == 'true') || (inputs.revert == true && steps.revert_step.outputs.has_changes == 'true') run: | git push origin ${{ steps.vars.outputs.branch_name }} - name: Create pull request id: create_pr - if: inputs.revert != true || (inputs.revert == true && steps.revert_step.outputs.has_changes == 'true') + if: (inputs.revert != true && steps.bump_commit.outputs.has_changes == 'true') || (inputs.revert == true && steps.revert_step.outputs.has_changes == 'true') run: | gh auth setup-git PR_URL=$(gh pr create \ @@ -217,7 +224,7 @@ jobs: echo "pull_request_url=${PR_URL}" >> $GITHUB_OUTPUT - name: Merge pull request - if: inputs.revert != true || (inputs.revert == true && steps.revert_step.outputs.has_changes == 'true') + if: (inputs.revert != true && steps.bump_commit.outputs.has_changes == 'true') || (inputs.revert == true && steps.revert_step.outputs.has_changes == 'true') run: | # Any checks for the PR are bypassed since the branch is expected to be functional gh pr merge "${{ steps.create_pr.outputs.pull_request_url }}" --merge --admin @@ -225,9 +232,13 @@ jobs: - name: Show logs if: inputs.revert != true run: | - echo "Bump complete." - echo "Branch: ${{ steps.vars.outputs.branch_name }}" - echo "PR: ${{ steps.create_pr.outputs.pull_request_url }}" + if [[ "${{ steps.bump_commit.outputs.has_changes }}" == "true" ]]; then + echo "Bump complete." + echo "Branch: ${{ steps.vars.outputs.branch_name }}" + echo "PR: ${{ steps.create_pr.outputs.pull_request_url }}" + else + echo "Bump skipped: the repository is already at the requested version/stage." + fi echo "Bumper scripts logs:" cat ${BUMP_LOG_PATH}/repository_bumper*log diff --git a/.github/workflows/5_changelog_check.yml b/.github/workflows/5_changelog_check.yml new file mode 100644 index 00000000..938cada5 --- /dev/null +++ b/.github/workflows/5_changelog_check.yml @@ -0,0 +1,62 @@ +name: 5.x Changelog check + +on: + pull_request: + types: [opened, synchronize, reopened, ready_for_review, labeled, unlabeled] + +jobs: + changelog_check: + runs-on: codebuild-github-actions-codebuild-runner-devops-amd-${{ github.run_id }}-${{ github.run_attempt }} + if: ${{ github.event_name == 'pull_request' && !github.event.pull_request.draft && !contains(github.event.pull_request.labels.*.name, 'no-changelog') }} + + permissions: + contents: read + + steps: + - name: Checkout repository + uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Validate CHANGELOG.md changes + env: + BASE_REF: ${{ github.base_ref }} + run: | + UPDATED="✅" FORMAT="—" INVALID="" + + ADDED=$(git diff -U0 "origin/${BASE_REF}...HEAD" -- CHANGELOG.md | grep -E '^\+[^+]' | sed 's/^+//' || true) + if [ -z "$ADDED" ]; then + UPDATED="❌" + echo "::error::CHANGELOG.md was not updated with new entries. Add one or add the 'no-changelog' label to skip this check." + else + FORMAT="✅" + + ENTRY_REGEX='^- .+ \(\[#[0-9]+\]\(https://github\.com/[^)]+/(issues|pull)/[0-9]+\)\)$' + INVALID=$(echo "$ADDED" | grep -E '^- ' | grep -vx -- '- None' | grep -vE "$ENTRY_REGEX" || true) + if [ -n "$INVALID" ]; then + FORMAT="❌" + echo "::error::Invalid CHANGELOG.md entries. Expected format: '- Description ([#123](https://github.com///issues/123))'. Offending lines:" + echo "$INVALID" + fi + fi + + { + echo "## Changelog check" + echo "" + echo "| Check | Result |" + echo "|---|---|" + echo "| CHANGELOG.md has new entries | $UPDATED |" + echo "| Entry format | $FORMAT |" + if [ -n "$INVALID" ]; then + echo "" + echo "Offending lines:" + echo '```' + echo "$INVALID" + echo '```' + fi + } >> "$GITHUB_STEP_SUMMARY" + + if [ "$UPDATED" != "✅" ] || [ "$FORMAT" != "✅" ]; then + exit 1 + fi + echo "CHANGELOG.md update is valid." diff --git a/CHANGELOG.md b/CHANGELOG.md index 07a249bb..c75fff12 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,24 +19,7 @@ All notable changes to this project will be documented in this file. - None -## [v5.0.1] - -### Added - -- None - -### Changed - -- None - -### Removed - -- None - -### Fixed - -- None - ## Prior version +- [v5.0.1](https://github.com/wazuh/wazuh-docker/blob/v5.0.1/CHANGELOG.md) - [v5.0.0](https://github.com/wazuh/wazuh-docker/blob/v5.0.0/CHANGELOG.md) diff --git a/SECURITY.md b/SECURITY.md index 4d35ef4f..6ab811e0 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,6 +1,6 @@ # Wazuh Open Source Project Security Policy -Version: 2023-06-12 +Version: 2026-07-06 ## Introduction This document outlines the Security Policy for Wazuh's open source projects. It emphasizes our commitment to maintain a secure environment for our users and contributors, and reflects our belief in the power of collaboration to identify and resolve security vulnerabilities. @@ -13,16 +13,27 @@ If you believe you've discovered a potential security vulnerability in one of ou Please submit your findings as security advisories under the "Security" tab in the relevant GitHub repository. Alternatively, you may send the details of your findings to [security@wazuh.com](mailto:security@wazuh.com). +## Reporting Vulnerabilities in Non-GA Versions + +Wazuh publishes pre-release versions (Alphas, Betas, and Release Candidates) of its open source projects ahead of General Availability (GA) to gather community feedback. If you discover a potential security vulnerability in one of these non-GA versions, please report it following the process described above. + +Upon receiving such a report, we will determine whether the vulnerability: + +- **Affects only non-GA version(s)**: We will manage the report privately by opening a GitHub Security Advisory (GHSA). Since the affected code has not been part of a GA release, the vulnerability is not eligible for a CVE ID, consistent with the [CNA Operational Rules](https://www.cve.org/ResourcesSupport/AllResources/CNARules). Once resolved, the GHSA will be converted into a public issue instead of a security advisory. +- **Also affects a previously released GA version**: We will continue managing the report as a GHSA and evaluate requesting a CVE ID for the GA-affected versions, in accordance with the eligibility criteria in the CNA Operational Rules. + ## Vulnerability Disclosure Policy Upon receiving a report of a potential vulnerability, our team will initiate an investigation. If the reported issue is confirmed as a vulnerability, we will take the following steps: -1. Acknowledgment: We will acknowledge the receipt of your vulnerability report and begin our investigation. -2. Validation: We will validate the issue and work on reproducing it in our environment. -3. Remediation: We will work on a fix and thoroughly test it -4. Release & Disclosure: After 90 days from the discovery of the vulnerability, or as soon as a fix is ready and thoroughly tested (whichever comes first), we will release a security update for the affected project. We will also publicly disclose the vulnerability by publishing a CVE (Common Vulnerabilities and Exposures) and acknowledging the discovering party. -5. Exceptions: In order to preserve the security of the Wazuh community at large, we might extend the disclosure period to allow users to patch their deployments. +1. **Acknowledgment**: We will acknowledge the receipt of your vulnerability report and begin our investigation. +2. **Validation**: We will validate the issue and work on reproducing it in our environment. +3. **Remediation**: We will develop a fix, have it reviewed, and merge it once thoroughly tested. +4. **Release**: We will publish a security release for the affected project that includes the fix. +5. **Rollout**: We will confirm that the fix has been applied to environments managed by Wazuh before proceeding with disclosure. +6. **Disclosure**: Once the fix has been released and confirmed in managed environments, we will publicly disclose the vulnerability by publishing a CVE (Common Vulnerabilities and Exposures), where applicable, and acknowledging the discovering party. +7. **Exceptions**: In order to preserve the security of the Wazuh community at large, we might extend the disclosure period to allow users to patch their deployments. -This 90-day period allows for end-users to update their systems and minimizes the risk of widespread exploitation of the vulnerability. +Steps 1 through 6 will be completed within 90 days from the report of the vulnerability. This period allows for end-users to update their systems and minimizes the risk of widespread exploitation of the vulnerability. ## Automatic Scanning We leverage GitHub Actions to perform automated scans of our supply chain. These scans assist us in identifying vulnerabilities and outdated dependencies in a proactive and timely manner. @@ -42,4 +53,4 @@ We ask that all users and contributors respect this policy and the security of o ## Changes to this Security Policy This policy may be revised from time to time. Each version of the policy will be identified at the top of the page by its effective date. -If you have any questions about this Security Policy, please contact us at [security@wazuh.com](mailto:security@wazuh.com) +If you have any questions about this Security Policy, please contact us at [security@wazuh.com](mailto:security@wazuh.com) \ No newline at end of file diff --git a/build-docker-images/wazuh-agent/Dockerfile b/build-docker-images/wazuh-agent/Dockerfile index 7cb8ea35..da45f1ce 100644 --- a/build-docker-images/wazuh-agent/Dockerfile +++ b/build-docker-images/wazuh-agent/Dockerfile @@ -36,8 +36,7 @@ RUN dnf install procps shadow-utils -y && \ curl -o /wazuh-agent.rpm "${agent_url}" && \ dnf install /wazuh-agent.rpm -y && \ rm -rf /wazuh-agent.rpm && \ - dnf clean all && \ - sed -i '//d' /var/ossec/etc/ossec.conf + dnf clean all # Download tini static binary (no external library dependencies) RUN curl --fail --silent -L \ diff --git a/build-docker-images/wazuh-agent/config/etc/cont-init.d/0-wazuh-init b/build-docker-images/wazuh-agent/config/etc/cont-init.d/0-wazuh-init index c7802236..f9efca25 100644 --- a/build-docker-images/wazuh-agent/config/etc/cont-init.d/0-wazuh-init +++ b/build-docker-images/wazuh-agent/config/etc/cont-init.d/0-wazuh-init @@ -62,6 +62,15 @@ set_manager_conn() { sed -i "s#
CHANGE_MANAGER_IP
#
$WAZUH_MANAGER_SERVER
#g" ${WAZUH_INSTALL_PATH}/etc/ossec.conf sed -i "s#CHANGE_ENROLL_IP#$WAZUH_REGISTRATION_SERVER#g" ${WAZUH_INSTALL_PATH}/etc/ossec.conf sed -i "s#CHANGE_AGENT_NAME#$WAZUH_AGENT_NAME#g" ${WAZUH_INSTALL_PATH}/etc/ossec.conf + if [ -n "$WAZUH_REGISTRATION_PASSWORD" ]; then + set +x + cat << EOF > /var/ossec/etc/authd.pass +$WAZUH_REGISTRATION_PASSWORD +EOF + set -x + else + echo "WAZUH_REGISTRATION_PASSWORD is not set; the authd.pass configuration is omitted." + fi } ############################################################################## diff --git a/build-docker-images/wazuh-dashboard/Dockerfile b/build-docker-images/wazuh-dashboard/Dockerfile index 40c287ef..6a004691 100644 --- a/build-docker-images/wazuh-dashboard/Dockerfile +++ b/build-docker-images/wazuh-dashboard/Dockerfile @@ -46,8 +46,7 @@ RUN setcap 'cap_net_bind_service=-ep' /usr/share/wazuh-dashboard/node/bin/node ################################################################################ # Build stage 1 (the current Wazuh dashboard image): -# -# Copy wazuh-dashboard from stage 0 +# Copy wazuh-dashboard from builder # Add entrypoint # Add wazuh_dashboard_config ################################################################################ diff --git a/build-docker-images/wazuh-indexer/Dockerfile b/build-docker-images/wazuh-indexer/Dockerfile index 80c528e3..3d2c4758 100644 --- a/build-docker-images/wazuh-indexer/Dockerfile +++ b/build-docker-images/wazuh-indexer/Dockerfile @@ -41,8 +41,7 @@ RUN yum install curl-minimal shadow-utils findutils hostname -y && \ ################################################################################ # Build stage 1 (the actual Wazuh indexer image): -# -# Copy wazuh-indexer from stage 0 +# Copy wazuh-indexer from builder # Add entrypoint ################################################################################ FROM amazonlinux:2023 diff --git a/build-docker-images/wazuh-manager/config/etc/cont-init.d/0-wazuh-init b/build-docker-images/wazuh-manager/config/etc/cont-init.d/0-wazuh-init index 6721da43..fa501081 100644 --- a/build-docker-images/wazuh-manager/config/etc/cont-init.d/0-wazuh-init +++ b/build-docker-images/wazuh-manager/config/etc/cont-init.d/0-wazuh-init @@ -252,9 +252,9 @@ configure_permissions() { ############################################################################## set_correct_permOwner() { - find /var/wazuh-manager/ -group 997 -exec chown :101 {} +; - find /var/wazuh-manager/ -group 999 -exec chown :101 {} +; - find /var/wazuh-manager/ -user 999 -exec chown 101:{} +; + find /var/wazuh-manager/ -group 997 -exec chown :101 {} + + find /var/wazuh-manager/ -group 999 -exec chown :101 {} + + find /var/wazuh-manager/ -user 999 -exec chown 101 {} + } ############################################################################## diff --git a/docs/ref/configuration/environment-variables.md b/docs/ref/configuration/environment-variables.md index 4c124fdf..313db3a3 100644 --- a/docs/ref/configuration/environment-variables.md +++ b/docs/ref/configuration/environment-variables.md @@ -21,8 +21,8 @@ The Wazuh Manager container accepts the following environment variables, which c ```yaml environment: - - INDEXER_USERNAME=admin - - INDEXER_PASSWORD=SecretPassword + - INDEXER_USERNAME=wazuh-manager + - INDEXER_PASSWORD=wazuh-manager - WAZUH_API_URL=https://wazuh.manager - DASHBOARD_USERNAME=kibanaserver - DASHBOARD_PASSWORD=kibanaserver @@ -30,7 +30,7 @@ environment: **Variable Descriptions:** -- `INDEXER_USERNAME` / `INDEXER_PASSWORD`: Credentials for accessing the Wazuh Indexer with `admin` user or a user with the same permissions. +- `INDEXER_USERNAME` / `INDEXER_PASSWORD`: Credentials for accessing the Wazuh Indexer with `wazuh-manager` user or a user with the same permissions. - `WAZUH_API_URL`: URL of the Wazuh API, used by other services for communication. - `DASHBOARD_USERNAME` / `DASHBOARD_PASSWORD`: Credentials for the Wazuh Dashboard to authenticate with the Indexer. @@ -57,8 +57,8 @@ The Wazuh Dashboard container accepts the following environment variables, which ```yaml environment: - - INDEXER_USERNAME=admin - - INDEXER_PASSWORD=SecretPassword + - INDEXER_USERNAME=wazuh-manager + - INDEXER_PASSWORD=wazuh-manager - WAZUH_API_URL=https://wazuh.manager - DASHBOARD_USERNAME=kibanaserver - DASHBOARD_PASSWORD=kibanaserver diff --git a/docs/ref/getting-started/deployment/wazuh-agent.md b/docs/ref/getting-started/deployment/wazuh-agent.md index 718718a3..fbf6da72 100644 --- a/docs/ref/getting-started/deployment/wazuh-agent.md +++ b/docs/ref/getting-started/deployment/wazuh-agent.md @@ -19,9 +19,11 @@ Follow these steps to deploy the Wazuh agent using Docker. # ... environment: - WAZUH_MANAGER_SERVER= + - WAZUH_REGISTRATION_PASSWORD= # ... ``` - **Note:** Replace `` with the actual IP address or hostname of your Wazuh manager. + **Note:** Replaces `` with the actual IP address or hostname of your Wazuh manager. + **Note:** Replaces `` with the password configured in the `/var/wazuh-manager/etc/authd.pass` file of the Wazuh manager server where you will connect. 3. Start the environment using `docker compose`: diff --git a/multi-node/docker-compose.yml b/multi-node/docker-compose.yml index 3e9a64d4..1eab2626 100644 --- a/multi-node/docker-compose.yml +++ b/multi-node/docker-compose.yml @@ -31,8 +31,8 @@ services: - WAZUH_NODE_TYPE=master - WAZUH_CLUSTER_BIND_ADDR=0.0.0.0 - WAZUH_CLUSTER_NODES=wazuh.master - - INDEXER_USERNAME=admin - - INDEXER_PASSWORD=admin + - INDEXER_USERNAME=wazuh-manager + - INDEXER_PASSWORD=wazuh-manager volumes: - master-wazuh-api-configuration:/var/wazuh-manager/api/configuration - master-wazuh-etc:/var/wazuh-manager/etc @@ -70,8 +70,8 @@ services: - WAZUH_NODE_TYPE=worker - WAZUH_CLUSTER_BIND_ADDR=0.0.0.0 - WAZUH_CLUSTER_NODES=wazuh.master - - INDEXER_USERNAME=admin - - INDEXER_PASSWORD=admin + - INDEXER_USERNAME=wazuh-manager + - INDEXER_PASSWORD=wazuh-manager volumes: - worker-wazuh-api-configuration:/var/wazuh-manager/api/configuration - worker-wazuh-etc:/var/wazuh-manager/etc @@ -213,8 +213,6 @@ services: - SERVER_PORT=5601 - SERVER_HOST=0.0.0.0 - OPENSEARCH_HOSTS=["https://wazuh1.indexer:9200","https://wazuh2.indexer:9200","https://wazuh3.indexer:9200"] - - INDEXER_USERNAME=admin - - INDEXER_PASSWORD=admin - WAZUH_API_URL=https://wazuh.master - DASHBOARD_USERNAME=kibanaserver - DASHBOARD_PASSWORD=kibanaserver diff --git a/single-node/docker-compose.yml b/single-node/docker-compose.yml index b8e18754..9e6a0e78 100644 --- a/single-node/docker-compose.yml +++ b/single-node/docker-compose.yml @@ -31,8 +31,8 @@ services: - WAZUH_NODE_NAME=manager - WAZUH_CLUSTER_NODES=wazuh.manager - WAZUH_CLUSTER_BIND_ADDR=wazuh.manager - - INDEXER_USERNAME=admin - - INDEXER_PASSWORD=admin + - INDEXER_USERNAME=wazuh-manager + - INDEXER_PASSWORD=wazuh-manager volumes: - wazuh_api_configuration:/var/wazuh-manager/api/configuration - wazuh_etc:/var/wazuh-manager/etc @@ -97,8 +97,6 @@ services: - SERVER_PORT=5601 - SERVER_HOST=0.0.0.0 - OPENSEARCH_HOSTS=https://wazuh.indexer:9200 - - INDEXER_USERNAME=admin - - INDEXER_PASSWORD=admin - WAZUH_API_URL=https://wazuh.manager - DASHBOARD_USERNAME=kibanaserver - DASHBOARD_PASSWORD=kibanaserver diff --git a/wazuh-agent/docker-compose.yml b/wazuh-agent/docker-compose.yml index ab44b626..a41cb511 100644 --- a/wazuh-agent/docker-compose.yml +++ b/wazuh-agent/docker-compose.yml @@ -5,3 +5,4 @@ services: restart: always environment: - WAZUH_MANAGER_SERVER= + - WAZUH_REGISTRATION_PASSWORD=