Skip to content

Commit 6ea517d

Browse files
committed
Replace changing source for CallDepthThreadLocalMap approach
1 parent 75b3a8b commit 6ea517d

File tree

4 files changed

+10
-86
lines changed

4 files changed

+10
-86
lines changed

dd-java-agent/agent-iast/src/main/java/com/datadog/iast/propagation/PropagationModuleImpl.java

Lines changed: 0 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.datadog.iast.propagation;
22

33
import static com.datadog.iast.model.Source.PROPAGATION_PLACEHOLDER;
4-
import static com.datadog.iast.taint.Ranges.changeHighestPriorityRange;
54
import static com.datadog.iast.taint.Ranges.highestPriorityRange;
65
import static com.datadog.iast.util.ObjectVisitor.State.CONTINUE;
76
import static datadog.trace.api.iast.VulnerabilityMarks.NOT_MARKED;
@@ -669,39 +668,6 @@ public void markIfTainted(@Nullable Object target, int mark) {
669668
}
670669
}
671670

672-
@Override
673-
public void changeSource(@Nullable Object target, byte origin) {
674-
if (target == null) {
675-
return;
676-
}
677-
changeSource(target, origin, null);
678-
}
679-
680-
@Override
681-
public void changeSource(@Nullable Object target, byte origin, @Nullable CharSequence name) {
682-
if (target == null) {
683-
return;
684-
}
685-
final IastContext ctx = IastContext.Provider.get();
686-
if (ctx == null) {
687-
return;
688-
}
689-
changeSource(ctx, target, origin, name);
690-
}
691-
692-
@Override
693-
public void changeSource(
694-
@Nullable final IastContext ctx,
695-
@Nullable Object target,
696-
byte origin,
697-
@Nullable CharSequence name) {
698-
if (ctx == null || target == null) {
699-
return;
700-
}
701-
final TaintedObjects to = ctx.getTaintedObjects();
702-
changeHighestPrioritySource(to, target, origin, name);
703-
}
704-
705671
@Override
706672
public boolean isTainted(@Nullable final Object target) {
707673
if (target == null) {
@@ -818,32 +784,6 @@ private static Source highestPrioritySource(
818784
}
819785
}
820786

821-
private static void changeHighestPrioritySource(
822-
final @Nonnull TaintedObjects to,
823-
final @Nonnull Object object,
824-
final byte origin,
825-
@Nullable final CharSequence name) {
826-
Source previousValue = highestPrioritySource(to, object);
827-
if (previousValue == null) {
828-
return;
829-
}
830-
Source newSource = newSource(object, origin, name, previousValue.getValue());
831-
if (object instanceof Taintable) {
832-
((Taintable) object).$$DD$setSource(newSource);
833-
} else {
834-
TaintedObject taintedObject = to.get(object);
835-
if (taintedObject == null) {
836-
return;
837-
}
838-
final Range[] ranges = getRanges(to, object);
839-
if (ranges == null || ranges.length == 0) {
840-
return;
841-
}
842-
changeHighestPriorityRange(ranges, newSource);
843-
taintedObject.setRanges(ranges);
844-
}
845-
}
846-
847787
private static void internalTaint(
848788
@Nonnull final TaintedObjects to,
849789
@Nonnull final Object value,

dd-java-agent/agent-iast/src/main/java/com/datadog/iast/taint/Ranges.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -144,20 +144,6 @@ public static Range highestPriorityRange(@Nonnull final Range[] ranges) {
144144
return ranges[0];
145145
}
146146

147-
public static void changeHighestPriorityRange(
148-
@Nonnull final Range[] ranges, @Nonnull final Source source) {
149-
for (int i = 0; i < ranges.length; i++) {
150-
if (ranges[i].getMarks() == NOT_MARKED) {
151-
Range newRange =
152-
new Range(ranges[i].getStart(), ranges[i].getLength(), source, ranges[i].getMarks());
153-
ranges[i] = newRange;
154-
}
155-
}
156-
Range newRange =
157-
new Range(ranges[0].getStart(), ranges[0].getLength(), source, ranges[0].getMarks());
158-
ranges[0] = newRange;
159-
}
160-
161147
/**
162148
* Checks if all ranges are coming from any header, in case no ranges are provided it will return
163149
* {@code true}

dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/IastResultSetInstrumentation.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import datadog.trace.api.iast.Source;
2020
import datadog.trace.api.iast.SourceTypes;
2121
import datadog.trace.api.iast.propagation.PropagationModule;
22+
import datadog.trace.bootstrap.CallDepthThreadLocalMap;
2223
import datadog.trace.bootstrap.ContextStore;
2324
import datadog.trace.bootstrap.InstrumentationContext;
2425
import java.sql.ResultSet;
@@ -78,13 +79,21 @@ public static void onExit(@Advice.This final ResultSet resultSet) {
7879

7980
@RequiresRequestContext(RequestContextSlot.IAST)
8081
public static class GetParameterAdvice {
82+
@Advice.OnMethodEnter(suppress = Throwable.class)
83+
public static void onEnter() {
84+
CallDepthThreadLocalMap.incrementCallDepth(ResultSet.class);
85+
}
86+
8187
@Advice.OnMethodExit(suppress = Throwable.class)
8288
@Source(SourceTypes.SQL_TABLE)
8389
public static void onExit(
8490
@Advice.Argument(0) Object argument,
8591
@Advice.Return final String value,
8692
@Advice.This final ResultSet resultSet,
8793
@ActiveRequestContext RequestContext reqCtx) {
94+
if (CallDepthThreadLocalMap.decrementCallDepth(ResultSet.class) > 0) {
95+
return;
96+
}
8897
ContextStore<ResultSet, Integer> contextStore =
8998
InstrumentationContext.get(ResultSet.class, Integer.class);
9099
if (contextStore.get(resultSet) > Config.get().getIastDbRowsToTaint()) {
@@ -99,11 +108,7 @@ public static void onExit(
99108
}
100109
IastContext ctx = reqCtx.getData(RequestContextSlot.IAST);
101110
if (argument instanceof String) {
102-
if (module.isTainted(value)) {
103-
module.changeSource(ctx, value, SourceTypes.SQL_TABLE, (String) argument);
104-
} else {
105-
module.taintString(ctx, value, SourceTypes.SQL_TABLE, (String) argument);
106-
}
111+
module.taintString(ctx, value, SourceTypes.SQL_TABLE, (String) argument);
107112
} else {
108113
module.taintString(ctx, value, SourceTypes.SQL_TABLE);
109114
}

internal-api/src/main/java/datadog/trace/api/iast/propagation/PropagationModule.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -347,11 +347,4 @@ int taintObjectDeeply(
347347
Source findSource(@Nullable IastContext ctx, @Nullable Object target);
348348

349349
void markIfTainted(@Nullable Object target, int mark);
350-
351-
void changeSource(@Nullable Object target, byte origin);
352-
353-
void changeSource(@Nullable Object target, byte origin, @Nullable CharSequence name);
354-
355-
void changeSource(
356-
@Nullable IastContext ctx, @Nullable Object target, byte origin, @Nullable CharSequence name);
357350
}

0 commit comments

Comments
 (0)