Kernel & RTOS
Lifecycle and lock-order correctness in kernel objects, user-pointer validation at the syscall boundary, and eBPF datapath bounds.
Shipping fixes upstream
Adil Alperen Çiftci · Security Engineer
I find where security invariants break in widely deployed infrastructure: kernels, container runtimes, identity systems, WAFs and protocol parsers. Then I reproduce it, fix it with a minimal patch, and land it upstream with regression tests.
01 / About
I am a security engineer based in Konya and a graduate of Selçuk University. My work sits where security properties are actually enforced: lock ordering in a kernel object, the bytes a guest agent passes to a process, the issuer a certificate path is allowed to trust, the request-body budget a WAF counts.
I contribute fixes to the open-source projects that defenders and platform teams depend on, from Cilium, SPIRE and Falco to impacket, Coraza and RT-Thread.
02 / Expertise
Every area below is backed by public patches you can read, review and run.
Lifecycle and lock-order correctness in kernel objects, user-pointer validation at the syscall boundary, and eBPF datapath bounds.
Guest agent byte preservation, descriptor ownership, shutdown ordering and failure reporting in container and microVM runtimes.
RFC 5280 path building, CA rotation, post-quantum signatures, workload identity and Kubernetes impersonation boundaries.
WAF rule-engine correctness, request-body budgets, detection rules with regression tests, and server-side authorization.
Bounds and structure validation in packet, PAC and DNS parsers; state-machine integrity in NAS and CoAP block transfer.
Authenticated webhooks, SBOM signature round-trips, dependency resolution in remediation, and reproducible build caches.
03 / Method
The same four steps on every change, whether it is a one-line bound check or a lifecycle redesign.
Start from a failing test or a minimal harness on the real target, never from a theory.
State the property that must hold: a bound, a lock order, a state transition, an identity binding.
Change the smallest surface that restores the invariant, in the project's own idiom.
Before-fail and after-pass regression tests, full upstream CI matrix, and lab runs where hardware or kernels matter.
04 / Upstream
Merged fixes first, then work currently in maintainer review. Each card opens the pull request on GitHub.
Enforces RFC 5280 pathLenConstraint and intermediate validity windows, replacing first-match issuer walking with depth- and attempt-bounded backtracking path building.
Certificate chain verification now rejects intermediates lacking basicConstraints cA or keyUsage keyCertSign, preventing leaf certificates from acting as issuing authorities.
Extends Gateway API BackendTLSPolicy handling to GRPCRoute backends, so gRPC upstream connections receive configured TLS validation and status reflects invalid CA references.
Handles None results from xor_pair and xor_key so encoder selection falls back to the next candidate instead of raising TypeError, with doctest coverage.
Distinguishes plugin extract_fields API failures from legitimately absent fields by logging plugin name and error, keeping extraction nonblocking and ABI-compatible.
Tracks visited pointer offsets during DNS compressed-name parsing and rejects repeated offsets, preventing unbounded recursion on multi-pointer cycles.
Restores empty text fields on signed parts lacking data at the request serialization boundary, keeping replayed Gemini history valid for unary, streaming and continuation requests.
Computes effective CA expiration from verified upstream certificate paths and uses it for rotation scheduling, SVID lifetime capping, journal persistence, and rejection of expired prepared CAs.
Derives Finding Group list visibility from the registered authorization queryset tied to the owning test and product, preserving product boundaries for groups without member findings.
Adds optional HMAC-SHA256 signing over exact transmitted webhook bytes, validates non-blank secrets, and keeps secrets out of payloads and logs.
Replaces a global signalfd index with bounded per-context slot lookup and detaches and frees notification listeners in signalfd_close to prevent stale references.
Stages RT-Smart terminal ioctl arguments in kernel buffers with copy-from/to-user validation instead of passing raw user pointers to handlers.
Stops trimming validated environment variables so container processes and hooks receive exactly the bytes approved by guest policy, retaining null-byte and delimiter checks.
Populates tot_len in XDP FIB lookups so the kernel MTU check applies and oversized frames are not redirected past the egress MTU bound.
Adds capability-gated ML-DSA-44/65/87 JOSE signing and verification with strict AKP key validation, private-material-free key publication, and canonical thumbprints.
Validates PAC descriptor tables, version, buffer alignment, bounds and overlap, plus attribute, requestor SID and signature checksum lengths before slicing.
Rejects truncated or inconsistent IPv6, BOOTP and TCP fixed-header fields and slices TCP payload from the validated data offset, raising ImpactPacketException.
Restricts regex prefilter suffix extraction to literals contiguous with the concat boundary, preventing derived required strings that could cause false negatives.
Enforces a request-body budget excluding file payloads, counting multipart headers and field data incrementally and setting body error variables on overflow.
Rejects exec credential plugins in client-supplied dynamic cluster kubeconfigs, with defense-in-depth validation in REST config construction to prevent backend command execution.
Applies the project destination ServiceAccount impersonation to web terminal cluster configs, so pod lookup and exec use the same Kubernetes identity as other operations.
Rejects plain, integrity-unverified NAS messages in the UE 4G and 5G NAS stacks once a security context is active, including on registration and attach accept transitions.
Enforces WebAssembly reference kind checks at C API boundaries, rejecting non-function handles in wasm_ref_as_func and mismatched reference types in calls and callbacks.
Adds a chunked fuzz harness with deterministic seed corpus exercising std.ipc frame reader bounds, partial reads and timeout handling over socketpairs.
Includes shared Rust libraries and workspace manifests in the agent build cache key so stale agent artifacts are not reused after shared crate changes.
Extends the NSE TLS default signature_algorithms vector with RSA and ECDSA SHA-384 entries in registry order, covered by a unit assertion on exact ordering.
Tracks Block1 received ranges at the smallest SZX used, rescaling per RFC 7959 so size changes cannot mark uncovered byte ranges complete.
Requires an authentication dependency on provider configuration GET and PUT routes and masks API keys in provider detail responses, with pytest coverage for both rules.
Restricts client-mutable wallet order fields, validates order ownership, and enforces idempotency, ownership and balance checks before task payout transfers are issued.
Gates dMSA domain-level relationship derivation on collected domain controller build and revision data, requiring explicit attribute write access on patched or unknown environments to avoid overstated reachability.
Emits delegated managed service accounts as a typed output stream and collects domain controller CurrentBuildNumber and revision registry values, leaving default and non-DC collection unchanged.
Recognizes delegated managed service account objects, resolves predecessor links, collects DC build and UBR registry values, and preserves distinct ACL relationships for superseded-account attribute writes.
Restricts external-data cache writes to keys actually sent in the provider request and skips caching responses carrying a system-level error.
Replaces transaction IDs containing path separators or ASCII control bytes with generated IDs, and the concurrent audit writer rejects unsafe IDs and escapes index entries.
Adds an evalDepth action that snapshots MATCHED_VAR and TX:0-9 per parent match, evaluating remaining chain links against each snapshot so only consistent paths match.
Extends rule 942550 to detect quoted MySQL MEMBER OF forms and keyword-joined JSON_EXTRACT surviving whitespace removal, with regression tests.
Adds rules 934230-934232 inspecting REQUEST_BODY for SYSTEM/PUBLIC external entity and external DOCTYPE declarations across paranoia levels, with regression tests.
Adds a heartbeat gate so Shutdown waits for in-flight fast-path heartbeats, preventing durable storage writes after the caller closes its store.
Bounds the stop-first update delay by the old task's StopGracePeriod so replacement tasks do not start while the old container is still stopping.
Streams cluster bootstrap payloads over process stdin instead of shell heredocs, with concurrent draining and explicit descriptor ownership and close-on-failure lifecycle.
Adds an eBPF event correlating EROFS returns from mount-write checks with the kernel-owned filename, capturing write opens denied before the LSM hook runs.
Validates generic and union-annotated kernel function parameters with Pydantic TypeAdapter so comma-containing annotations no longer skip argument parsing.
Computes UDP checksums over the full declared UDP length, including inner padding of encapsulated frames.
Resolves property-backed Maven groupId and artifactId through the effective model so guided remediation matches dependencies correctly instead of falling back to dependency management.
Adds custom JSON serialization so inline, multi-signer and certificate-chain JSF signatures survive round-trips and promoted signer field access no longer panics.
05 / Research
Open-source projects for measuring detections, protocol conformance and runtime provenance in isolated environments.
Deterministic, typed checks of Microsoft identity protocol requirements (OAuth token exchange, OIDC, MS-PAC, dMSA/Kerberos) with bounded observations from an isolated Windows Server 2025 lab.
Detection engineering lab on Hyper-V that measures Sigma rule ATT&CK coverage on real host telemetry and benchmarks LLM alert triage. Defensive only.
Research prototype correlating cgroup-scoped eBPF runtime evidence with artifact digests, SLSA provenance and in-toto Runtime Trace statements to return ALLOW, REVIEW or REJECT.
Local policy engine that turns versioned AI-agent and MCP tool-call events into allow, review or deny decisions, with redacted evidence kept in a hash-chained ledger.
Isolated enterprise lab that normalizes and correlates Windows endpoint and network evidence across authorized experiments using an evidence graph; identity-plane correlation is not yet validated.
Isolated, manifest-authorized range that checks whether detections can tell captured evidence of controlled actions apart from benign baselines.
Deterministic, socketless CPS/OT harness that simulates PLC and HMI state in memory and measures how detectors respond to synthetic process events.
06 / Lab
Changes are verified on real targets in an isolated environment before they reach a maintainer.
07 / Contact
Security reviews, upstream fixes, detection engineering and verification work. For project-specific questions, the relevant issue or pull request is the fastest path.