Detection rules › Panther

Panther rules: docusign

DocuSign Envelope Corrected

#
Severity
low
Log types
Docusign.Connect
Tags
DocuSign, Envelope, Tampering
Reference
developer.docusign.com
Source
github.com/panther-labs/panther-analysis

Detects when a DocuSign envelope is corrected after being sent. Frequent corrections could indicate document tampering attempts, process abuse, or suspicious modification of legal documents. Monitor for patterns of correction behavior that may indicate fraud.

Detection logic

from panther_docusign_helpers import docusign_alert_context


def rule(event):
    return event.get("event") == "envelope-corrected"


def title(event):
    envelope_id = event.deep_get("data", "envelopeId", default="Unknown")
    sender_email = event.deep_get("data", "sender", "email", default="Unknown")
    return f"DocuSign envelope [{envelope_id}] corrected by [{sender_email}]"


def alert_context(event):
    return docusign_alert_context(event)

Rule specification

AnalysisType: rule
Filename: docusign_envelope_corrected.py
RuleID: "Docusign.Connect.EnvelopeCorrected"
DisplayName: "DocuSign Envelope Corrected"
Enabled: true
LogTypes:
  - Docusign.Connect
Tags:
  - DocuSign
  - Envelope
  - Tampering
Severity: Low
Description: >
  Detects when a DocuSign envelope is corrected after being sent. Frequent corrections could indicate
  document tampering attempts, process abuse, or suspicious modification of legal documents. Monitor
  for patterns of correction behavior that may indicate fraud.
Runbook: |
  1. Review the envelope contents and what was corrected
  2. Verify if the correction was legitimate business process
  3. Check for patterns of envelope corrections by the same user
  4. Review the original and corrected document versions
  5. Consider investigating other envelopes sent by the same sender
  6. Verify recipient authentication for corrected envelopes
Reference: https://developer.docusign.com/docs/connect/events/
SummaryAttributes:
  - data.envelopeId
  - data.senderEmail
  - data.email

Stages and Predicates

Fires on Docusign.Connect events when the condition below holds.

Condition

  • event is envelope-corrected

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
eventeq
  • envelope-corrected
field:"event" kind:eq value:"envelope-corrected"

Output fields

Fields the rule emits when it matches, drawn from the rule's alert_context.

FieldSource
envelope_iddata.envelopeId
email_blurbdata.emailBlurb
email_subjectdata.emailSubject
sender_namedata.sender.userName
sender_emaildata.sender.email
sender_ip_addressdata.sender.ipAddress
user_iddata.userId

Response runbook

1. Review the envelope contents and what was corrected

2. Verify if the correction was legitimate business process

3. Check for patterns of envelope corrections by the same user

4. Review the original and corrected document versions

5. Consider investigating other envelopes sent by the same sender

6. Verify recipient authentication for corrected envelopes

Worked example

A sample event from the rule's unit tests that triggers a match.

Sample Test Event
{
  "apiVersion": "v2.1",
  "configurationId": "config123",
  "data": {
    "accountId": "12345",
    "email": "frodo@lotr.com",
    "envelopeDocuments": [
      {
        "documentId": "doc1",
        "name": "Contract.pdf",
        "pages": 5
      }
    ],
    "envelopeId": "envelope123",
    "envelopeSummary": {
      "created": "2024-01-15T09:00:00.000Z",
      "status": "corrected"
    },
    "recipientId": "recipient123",
    "senderEmail": "denethor@lotr.com",
    "userId": "user123"
  },
  "event": "envelope-corrected",
  "generatedDateTime": "2024-01-15T10:30:00.000Z",
  "retryCount": 0,
  "uri": "/api/v2/accounts/12345/envelopes/abc123"
}

DocuSign Envelope Voided

#
Severity
medium
Log types
Docusign.Connect
Tags
DocuSign, Envelope, Fraud
Reference
developer.docusign.com
Source
github.com/panther-labs/panther-analysis

Detects when a DocuSign envelope is voided. Frequent voiding of envelopes could indicate fraudulent activity, document tampering attempts, or process abuse. Monitor for patterns of voiding behavior.

Detection logic

from panther_docusign_helpers import docusign_alert_context


def rule(event):
    return event.get("event") == "envelope-voided"


def title(event):
    envelope_id = event.deep_get("data", "envelopeId", default="Unknown")
    sender_email = event.deep_get("data", "sender", "email", default="Unknown")
    return f"DocuSign envelope [{envelope_id}] voided by [{sender_email}]"


def alert_context(event):
    return docusign_alert_context(event) | {
        "voided_reason": event.deep_get("data", "envelopeSummary", "voidedReason"),
        "voided_date_time": event.deep_get("data", "envelopeSummary", "voidedDateTime"),
    }

Rule specification

AnalysisType: rule
Filename: docusign_envelope_voided.py
RuleID: "Docusign.Connect.EnvelopeVoided"
DisplayName: "DocuSign Envelope Voided"
Enabled: true
LogTypes:
  - Docusign.Connect
Tags:
  - DocuSign
  - Envelope
  - Fraud
Severity: Medium
Description: >
  Detects when a DocuSign envelope is voided. Frequent voiding of envelopes could indicate fraudulent
  activity, document tampering attempts, or process abuse. Monitor for patterns of voiding behavior.
Runbook: |
  1. Review the envelope contents and recipients
  2. Verify if the voiding was legitimate or suspicious
  3. Check for patterns of envelope voiding by the same user
  4. Review the termination reason for additional context
  5. Consider investigating other envelopes sent by the same sender
Reference: https://developer.docusign.com/docs/connect/events/
SummaryAttributes:
  - data.envelopeId
  - data.senderEmail
  - data.terminationReason

Stages and Predicates

Fires on Docusign.Connect events when the condition below holds.

Condition

  • event is envelope-voided

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
eventeq
  • envelope-voided
field:"event" kind:eq value:"envelope-voided"

Output fields

Fields the rule emits when it matches, drawn from the rule's alert_context.

FieldSource
envelopeIddata.envelopeId
emaildata.sender.email

Response runbook

1. Review the envelope contents and recipients

2. Verify if the voiding was legitimate or suspicious

3. Check for patterns of envelope voiding by the same user

4. Review the termination reason for additional context

5. Consider investigating other envelopes sent by the same sender

Worked example

A sample event from the rule's unit tests that triggers a match.

Sample Test Event
{
  "apiVersion": "v2.1",
  "configurationId": "config123",
  "data": {
    "accountId": "12345",
    "envelopeId": "envelope123",
    "envelopeSummary": {
      "created": "2024-01-15T09:00:00.000Z",
      "status": "voided"
    },
    "senderEmail": "denethor@lotr.com",
    "terminated_by": "user123",
    "terminationReason": "User voided envelope",
    "userId": "user123"
  },
  "event": "envelope-voided",
  "generatedDateTime": "2024-01-15T10:30:00.000Z",
  "retryCount": 0,
  "uri": "/api/v2/accounts/12345/envelopes/abc123"
}

DocuSign Recipient Authentication Failure

#
Severity
medium
Log types
Docusign.Connect
Tags
DocuSign, Authentication
Reference
developer.docusign.com
Source
github.com/panther-labs/panther-analysis

Detects when a DocuSign recipient fails authentication while attempting to access an envelope. This could indicate attempted unauthorized access to sensitive documents or credential compromise.

Detection logic

from panther_docusign_helpers import docusign_alert_context, get_recipients


def rule(event):
    return event.get("event") == "recipient-authentication-failure"


def title(event):
    recipients = get_recipients(event)
    recipient = (
        [
            recipient
            for recipient in recipients
            if recipient.get("recipientId") == event.deep_get("data", "recipientId")
        ][0]
        if recipients
        else {}
    )
    recipient_email = recipient.get("email", "Unknown")
    envelope_id = event.deep_get("data", "envelopeId", default="Unknown")
    return (
        f"DocuSign recipient authentication failure for "
        f"[{recipient_email}] on envelope [{envelope_id}]"
    )


def alert_context(event):
    return docusign_alert_context(event)

Rule specification

AnalysisType: rule
Filename: docusign_recipient_authentication_failure.py
RuleID: "Docusign.Connect.RecipientAuthenticationFailure"
DisplayName: "DocuSign Recipient Authentication Failure"
Enabled: true
LogTypes:
  - Docusign.Connect
Tags:
  - DocuSign
  - Authentication
Severity: Medium
Threshold: 5
DedupPeriodMinutes: 60
Description: >
  Detects when a DocuSign recipient fails authentication while attempting to access an envelope.
  This could indicate attempted unauthorized access to sensitive documents or credential compromise.
Runbook: |
  1. Review the recipient's email and authentication method used
  2. Check if this is a legitimate user having authentication issues
  3. Verify if the envelope contains sensitive information
  4. Consider blocking the recipient if suspicious activity is detected
  5. Review other envelopes sent to the same recipient
Reference: https://developer.docusign.com/docs/connect/events/
SummaryAttributes:
  - data.email
  - data.envelopeId
  - data.authenticationStatus

Stages and Predicates

Fires on Docusign.Connect events when the condition below holds.

Condition

  • event is recipient-authentication-failure
Alert cadence
alerts after 5 matches within 1h

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
eventeq
  • recipient-authentication-failure
field:"event" kind:eq value:"recipient-authentication-failure"

Output fields

Fields the rule emits when it matches, drawn from the rule's alert_context.

FieldSource
envelope_iddata.envelopeId
email_blurbdata.emailBlurb
email_subjectdata.emailSubject
sender_namedata.sender.userName
sender_emaildata.sender.email
sender_ip_addressdata.sender.ipAddress
user_iddata.userId

Response runbook

1. Review the recipient's email and authentication method used

2. Check if this is a legitimate user having authentication issues

3. Verify if the envelope contains sensitive information

4. Consider blocking the recipient if suspicious activity is detected

5. Review other envelopes sent to the same recipient

Worked example

A sample event from the rule's unit tests that triggers a match.

Sample Test Event
{
  "apiVersion": "v2.1",
  "configurationId": "config123",
  "data": {
    "accountId": "12345",
    "authenticationStatus": "Failed",
    "email": "sam@lotr.com",
    "envelopeId": "envelope123",
    "errorReason": "Invalid authentication credentials",
    "method": "SMS",
    "name": "John Doe",
    "phoneNumber": "+1234567890",
    "recipientId": "recipient123",
    "routingOrder": 1,
    "userId": "user123"
  },
  "event": "recipient-authentication-failure",
  "generatedDateTime": "2024-01-15T10:30:00.000Z",
  "retryCount": 0,
  "uri": "/api/v2/accounts/12345/envelopes/abc123/recipients/recipient123"
}

DocuSign Recipient Declined Envelope

#
Severity
low
Log types
Docusign.Connect
Tags
DocuSign, Recipient, Declined, Business Process
Reference
developer.docusign.com
Source
github.com/panther-labs/panther-analysis

Detects when a DocuSign recipient declines to sign an envelope. While often legitimate business activity, frequent declines or patterns of declines may indicate issues with document validity, recipient concerns about authenticity, or potential fraud attempts.

Detection logic

from panther_docusign_helpers import docusign_alert_context, get_recipients


def rule(event):
    return event.get("event") == "recipient-declined"


def title(event):
    recipients = get_recipients(event)
    recipient = (
        [
            recipient
            for recipient in recipients
            if recipient.get("recipientId") == event.deep_get("data", "recipientId")
        ][0]
        if recipients
        else {}
    )
    recipient_email = recipient.get("email", "Unknown")
    envelope_id = event.deep_get("data", "envelopeId", default="Unknown")
    return f"DocuSign recipient [{recipient_email}] declined envelope [{envelope_id}]"


def alert_context(event):
    return docusign_alert_context(event)

Rule specification

AnalysisType: rule
Filename: docusign_recipient_declined.py
RuleID: "Docusign.Connect.RecipientDeclined"
DisplayName: "DocuSign Recipient Declined Envelope"
Enabled: true
LogTypes:
  - Docusign.Connect
Tags:
  - DocuSign
  - Recipient
  - Declined
  - Business Process
Severity: Low
Description: >
  Detects when a DocuSign recipient declines to sign an envelope. While often legitimate business
  activity, frequent declines or patterns of declines may indicate issues with document validity,
  recipient concerns about authenticity, or potential fraud attempts.
Runbook: |
  1. Review the envelope contents and recipients
  2. Check if the decline reason was provided
  3. Verify if this is expected business behavior
  4. Monitor for patterns of declines for the same envelope or sender
  5. Consider reaching out to the recipient for clarification
  6. Review if the envelope was sent to the correct recipient
Reference: https://developer.docusign.com/docs/connect/events/
SummaryAttributes:
  - data.email
  - data.envelopeId
  - data.senderEmail

Stages and Predicates

Fires on Docusign.Connect events when the condition below holds.

Condition

  • event is recipient-declined

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
eventeq
  • recipient-declined
field:"event" kind:eq value:"recipient-declined"

Output fields

Fields the rule emits when it matches, drawn from the rule's alert_context.

FieldSource
envelope_iddata.envelopeId
email_blurbdata.emailBlurb
email_subjectdata.emailSubject
sender_namedata.sender.userName
sender_emaildata.sender.email
sender_ip_addressdata.sender.ipAddress
user_iddata.userId

Response runbook

1. Review the envelope contents and recipients

2. Check if the decline reason was provided

3. Verify if this is expected business behavior

4. Monitor for patterns of declines for the same envelope or sender

5. Consider reaching out to the recipient for clarification

6. Review if the envelope was sent to the correct recipient

Worked example

A sample event from the rule's unit tests that triggers a match.

Sample Test Event
{
  "apiVersion": "v2.1",
  "configurationId": "config123",
  "data": {
    "accountId": "12345",
    "email": "sam@lotr.com",
    "envelopeId": "envelope123",
    "envelopeSummary": {
      "created": "2024-01-15T09:00:00.000Z",
      "status": "declined"
    },
    "name": "John Doe",
    "recipientId": "recipient123",
    "routingOrder": 1,
    "senderEmail": "denethor@lotr.com",
    "terminationReason": "Recipient declined to sign",
    "userId": "user123"
  },
  "event": "recipient-declined",
  "generatedDateTime": "2024-01-15T10:30:00.000Z",
  "retryCount": 0,
  "uri": "/api/v2/accounts/12345/envelopes/abc123/recipients/recipient123"
}

DocuSign Template Management Activity

#
Severity
medium
Log types
Docusign.Connect
Tags
DocuSign, Template, Administrative
Reference
developer.docusign.com
Source
github.com/panther-labs/panther-analysis

Detects DocuSign template management activities including creation, modification, and deletion. Template changes can affect business processes and should be monitored for unauthorized modifications. Deletions are particularly critical as they may indicate data destruction or process disruption.

Detection logic

from panther_docusign_helpers import docusign_alert_context


def rule(event):
    template_events = ["template-created", "template-modified", "template-deleted"]
    return event.get("event") in template_events


def title(event):
    event_type = event.get("event", "template-modified").split("-")[1]
    template_id = event.deep_get("data", "templateId", default="Unknown")
    user_id = event.deep_get("data", "userId", default="Unknown")

    action = event_type.replace("template-", "").replace("-", " ").title()
    return f"DocuSign template {action.lower()}: {template_id} by user {user_id}"


def severity(event):
    event_type = event.get("event")
    if event_type == "template-deleted":
        return "DEFAULT"
    if event_type == "template-modified":
        return "LOW"
    return "INFO"


def alert_context(event):
    return docusign_alert_context(event)

Rule specification

AnalysisType: rule
Filename: docusign_template_management.py
RuleID: "Docusign.Connect.TemplateManagement"
DisplayName: "DocuSign Template Management Activity"
Enabled: true
LogTypes:
  - Docusign.Connect
Tags:
  - DocuSign
  - Template
  - Administrative
Severity: Medium
Description: >
  Detects DocuSign template management activities including creation, modification, and deletion.
  Template changes can affect business processes and should be monitored for unauthorized modifications.
  Deletions are particularly critical as they may indicate data destruction or process disruption.
Runbook: |
  1. Review the template changes and verify they are authorized
  2. Check if the user has appropriate permissions for template management
  3. For deletions, verify if this was intentional and documented
  4. For modifications, review what specific changes were made
  5. Monitor for patterns of excessive template changes
  6. Ensure proper approval workflow was followed for template changes
Reference: https://developer.docusign.com/docs/connect/events/
SummaryAttributes:
  - event
  - data.templateId
  - data.userId
  - data.email

Stages and Predicates

Fires on Docusign.Connect events when the condition below holds.

Condition

  • event is one of template-created, template-modified, template-deleted

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
eventin
  • template-created
  • template-deleted
  • template-modified
field:"event" kind:in

Output fields

Fields the rule emits when it matches, drawn from the rule's alert_context.

FieldSource
envelope_iddata.envelopeId
email_blurbdata.emailBlurb
email_subjectdata.emailSubject
sender_namedata.sender.userName
sender_emaildata.sender.email
sender_ip_addressdata.sender.ipAddress
user_iddata.userId
templateIddata.templateId

Response runbook

1. Review the template changes and verify they are authorized

2. Check if the user has appropriate permissions for template management

3. For deletions, verify if this was intentional and documented

4. For modifications, review what specific changes were made

5. Monitor for patterns of excessive template changes

6. Ensure proper approval workflow was followed for template changes

Worked example

A sample event from the rule's unit tests that triggers a match.

Sample Test Event
{
  "apiVersion": "v2.1",
  "configurationId": "config123",
  "data": {
    "accountId": "12345",
    "email": "peregrin@lotr.com",
    "name": "Contract Template",
    "templateId": "template123",
    "templates": [
      {
        "name": "Contract Template",
        "shared": true,
        "templateId": "template123"
      }
    ],
    "userId": "user123"
  },
  "event": "template-created",
  "generatedDateTime": "2024-01-15T10:30:00.000Z",
  "retryCount": 0,
  "uri": "/api/v2/accounts/12345/templates/template123"
}