<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://db.gcve.eu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Sat, 07 Nov 2026 11:11:31 +0000</lastBuildDate>
    <item>
      <title>GHSA-93mf-426m-g6x9 — CoreDNS: DNS Cache Pinning via etcd Lease ID Confusion</title>
      <link>https://db.gcve.eu/vuln/ghsa-93mf-426m-g6x9</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Go: github.com/coredns/coredns&lt;/p&gt;
&lt;p&gt;# Summary&lt;/p&gt;
&lt;p&gt;The CoreDNS etcd plugin contains a TTL confusion vulnerability where lease IDs are incorrectly used as TTL values, enabling cache pinning for very long periods. This can effectively cause a denial of service for DNS updates/changes to affected services.&lt;/p&gt;
&lt;p&gt;# Details&lt;/p&gt;
&lt;p&gt;In `plugin/etcd/etcd.go`, the `TTL()` function casts the 64-bit etcd lease ID to a uint32 and uses it as the TTL:&lt;/p&gt;
&lt;p&gt;```go
func (e *Etcd) TTL(kv *mvccpb.KeyValue, serv *msg.Service) uint32 {
    etcdTTL := uint32(kv.Lease)  // BUG: Lease ID != TTL duration
    // ... rest of function uses etcdTTL as actual TTL
}
```&lt;/p&gt;
&lt;p&gt;Lease IDs are identifiers, not durations. Large lease IDs can produce very large TTLs after truncation, causing downstream resolvers and clients to cache answers for years.&lt;/p&gt;
&lt;p&gt;This enables cache pinning attacks, such as:&lt;/p&gt;
&lt;p&gt;1. Attacker has etcd write access (compromised service account, misconfigured RBAC/TLS, exposed etcd, insider).
2. Attacker writes/updates a key and attaches any lease (the actual lease duration is irrelevant; the ID is misused).
4. CoreDNS serves the record with an extreme TTL; downstream resolvers/clients cache it for a very long time.
5. Even after fixing/deleting the key (or restarting CoreDNS), clients continue to use the cached answer until their caches expire or enforce their own TTL caps.&lt;/p&gt;
&lt;p&gt;Some resolvers implement TTL caps, but values and defaults vary widely and are not guaranteed.&lt;/p&gt;
&lt;p&gt;# PoC&lt;/p&gt;
&lt;p&gt;1. Launch etcd:&lt;/p&gt;
&lt;p&gt;```bash
etcd \
  --data-dir ./etcd-data \
  --listen-client-ur…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Go: github.com/coredns/coredns&lt;/p&gt;
&lt;p&gt;# Summary&lt;/p&gt;
&lt;p&gt;The CoreDNS etcd plugin contains a TTL confusion vulnerability where lease IDs are incorrectly used as TTL values, enabling cache pinning for very long periods. This can effectively cause a denial of service for DNS updates/changes to affected services.&lt;/p&gt;
&lt;p&gt;# Details&lt;/p&gt;
&lt;p&gt;In `plugin/etcd/etcd.go`, the `TTL()` function casts the 64-bit etcd lease ID to a uint32 and uses it as the TTL:&lt;/p&gt;
&lt;p&gt;```go
func (e *Etcd) TTL(kv *mvccpb.KeyValue, serv *msg.Service) uint32 {
    etcdTTL := uint32(kv.Lease)  // BUG: Lease ID != TTL duration
    // ... rest of function uses etcdTTL as actual TTL
}
```&lt;/p&gt;
&lt;p&gt;Lease IDs are identifiers, not durations. Large lease IDs can produce very large TTLs after truncation, causing downstream resolvers and clients to cache answers for years.&lt;/p&gt;
&lt;p&gt;This enables cache pinning attacks, such as:&lt;/p&gt;
&lt;p&gt;1. Attacker has etcd write access (compromised service account, misconfigured RBAC/TLS, exposed etcd, insider).
2. Attacker writes/updates a key and attaches any lease (the actual lease duration is irrelevant; the ID is misused).
4. CoreDNS serves the record with an extreme TTL; downstream resolvers/clients cache it for a very long time.
5. Even after fixing/deleting the key (or restarting CoreDNS), clients continue to use the cached answer until their caches expire or enforce their own TTL caps.&lt;/p&gt;
&lt;p&gt;Some resolvers implement TTL caps, but values and defaults vary widely and are not guaranteed.&lt;/p&gt;
&lt;p&gt;# PoC&lt;/p&gt;
&lt;p&gt;1. Launch etcd:&lt;/p&gt;
&lt;p&gt;```bash
etcd \
  --data-dir ./etcd-data \
  --listen-client-ur…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-93mf-426m-g6x9</guid>
    </item>
  </channel>
</rss>
