Software agency in Cluj-Napoca
A team delivering for several clients wants the same set of checks in every project, with a per-client report at the end of each sprint.
AI code security is mostly a problem of volume: assistants write a lot of plausible code quickly, and flaws reach production looking like good code. We put gates into the CI/CD pipelines of projects hosted with us: SAST with triage, secret scanning, SBOMs and verified dependencies, and signed images. What fails a gate never reaches your server.
The chain has four checkpoints. In the code, SAST with Semgrep rules looks at input validation, queries built by concatenation and missing authorisation on routes. In dependencies, an SBOM is generated on every build and compared with vulnerability databases. In images, layers are scanned, a non-root user is required and cosign signs the result. In infrastructure as code, checkov rules catch public storage, open ports and over-wide permissions. Secret scanning runs everywhere, including the repository history.
Models produce code that compiles and looks right but repeats unsafe habits from their training data: string concatenation in queries, missing validation, poor cryptographic choices, secrets typed straight into a file, and invented package names that someone else later registers. The real issue is speed: more code per hour means more attack surface. The same models also help defend: triaging SAST results, explaining a finding in the context of its function and proposing a fix. The checks stay deterministic, and the merge decision stays with a person.
A gate that blocks everything is switched off within two weeks, so we calibrate it: fail only on high severity and on secrets, warn on the rest, and keep a list of exceptions with an owner and an expiry date. Scans run in parallel with the tests, so build time does not grow noticeably, and vulnerability databases are cached. On a pull request we comment only on what is new compared with the base branch, so the developer sees what they introduced rather than the project's historical debt.
We configure the pipeline on GitHub Actions, GitLab CI or a self-hosted runner on your VPS in Frankfurt, if you want the source to stay inside your own infrastructure. You request the work from the DevOps Services section of the client panel. From the monthly hours (1 h on cPanel from Advanced up, 1–8 h on VPS, 5–10 h on dedicated by plan, 10 h on GPU) we keep rules current, review expired exceptions and add checks to new projects. A large pipeline refactor exceeds the allowance and is billed separately. Hours do not carry over.
Every plan includes monthly hours of DevOps, CyberSecurity and Programming work delivered by the 4hosting team: 1 h from cPanel Advanced upwards, 1–8 h on VPS, 5–10 h on dedicated servers depending on the plan, and 10 h on GPU servers. You request them from the client panel, unused hours are not carried into the next month, and extra hours are accepted and billed separately.
Ask for pipeline hardening in DevOps Services: tell us where the code lives, how you deploy and which thresholds you can accept at the start.
We run a first pass: SAST, secrets in history, dependencies, images and IaC. You see what a gate would block today and what can be fixed quickly.
We add the steps to CI, calibrate severities, rotate exposed keys and sign images. Gates move gradually from warning to blocking.
You receive the configuration, the exception list with expiry dates and the documentation. We review the rules regularly from the included hours.
A team delivering for several clients wants the same set of checks in every project, with a per-client report at the end of each sprint.
A team using code assistants adds gates on pull requests, so the large volume of new code does not reach production unchecked.
A Bucharest company must present an SBOM and scan evidence for every release it delivers to a banking partner.
Not by default. It compiles and looks fine, but it repeats unsafe patterns: missing validation, queries built by concatenation, secrets in files, packages that do not exist. Treat it like code from a new colleague: useful and fast, but put through the same automated checks and a human review.
The term for building an application by chatting with a model without reading closely what comes out. The risk is not syntax but what you cannot see: absent authorisation, exposed data, unknown dependencies. A gate in CI turns the gamble into a repeatable process.
An attack on package names that a model invents. An assistant suggests a library that does not exist, someone registers that name with malicious code, and the next developer to follow the suggestion installs it. We verify names and provenance during the build and block untested automatic updates.
The full list of components your software is built from: libraries, versions and licences. We generate it on every build with Syft and check it with Grype, so when a new CVE appears you know within minutes whether it affects you, and in which delivered version.
SAST reads the source and catches classes of flaws before deployment, on every pull request. DAST attacks the running application and catches what only appears at runtime: configuration, sessions, integrations. We use both, SAST in CI and DAST on the test environment before a release.
Scan at commit with pre-commit and gitleaks, plus one pass over the whole history, because an old secret stays valid. Found keys are rotated, not merely deleted from the code. Secrets live in environment variables, in SOPS or in a vault, never in versioned files.
Request pipeline hardening from the client panel: SAST, secrets, SBOM, signed images and gates calibrated to your team's rhythm.